かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Python3 要素が n の配列を生成したい

データを突っ込む初期値として [0, 0, 0] とか [[], [], []] みたいな配列を作りたい

* n で要素を繰り返した配列が作れる

data = [0] * 3
# [0, 0, 0]

* n する配列の要素全てが n 回繰り返される

data = [1, 2, 3] * 3
# [1, 2, 3, 1, 2, 3, 1, 2, 3]

要素に配列や辞書を持つリスト作成は注意が必要

* n の繰り返しは同じ要素を繰り返しているので参照値である配列や辞書は同じ参照を持つものが繰り返されてしまうので注意が必要

配列

data = [[]] * 3
# [[], [], []]
data[0].append(1)
# [[1], [1], [1]]

辞書

data = [{}] * 3
# [{}, {}, {}]
data[0]['foo'] = 'bar'
# [{'foo': 'bar'}, {'foo': 'bar'}, {'foo': 'bar'}]
data[0].update({'foo': '1', 'bar': 2})
# [{'foo': '1', 'bar': 2}, {'foo': '1', 'bar': 2}, {'foo': '1', 'bar': 2}]

参照のデータを要素にしたい場合は素直にリスト内表記で作成すればOK

配列

data = [[] for i in range(3)]
# [[], [], []]
data[0].append(100)
# [[100], [], []]

辞書

data = [{} for i in range(3)]
# [{}, {}, {}]
data[0]['foo'] = 'bar'
# [{'foo': 'bar'}, {}, {}]
data[2].update({'foo': '1', 'bar': 2})
# [{'foo': 'bar'}, {}, {'foo': '1', 'bar': 2}]

おまけ: 辞書は * n できない

{'a': 1} * 3
TypeError: unsupported operand type(s) for *: 'dict' and 'int'

所管

簡単に要素が n 個の配列・辞書を作ることが出来ました!
参照なデータを要素に取る時だけ作り方に注意が必要そうです。

思い出したかのように時々触るくらいなので覚えられない!


[参考]

Pythonでつくる ゲーム開発 入門講座

Pythonでつくる ゲーム開発 入門講座

ゲーム作るの楽しそう!

🐍 繋がりだけでサムネにしようと貼った邪神ちゃん