n
同一のサブリストを含むリストをプログラムで作成しようとしています:
>>> pos = [10,20]
>>> 3 * pos
[10, 20, 10, 20, 10, 20]
しかし、私が欲しいのは[[10,20], [10,20], [10,20]]
手がかりはありますか?
[[10, 20] for x in range(3)]
気づく
[[10, 20]] * 3
同じリストを3回コピーするため
リスト内包表記を使用します。
[[10, 20] for _ in range(3)]
乗算を使用するオプションもあります。
[[10, 20]] * 3 # or [pos] * 3
しかし、それは同じネストされたリストへの3つの参照のリストを作成します:
>>> lis = [[10, 20]] * 3
>>> lis[0][0] = 'foo'
>>> lis
[['foo', 20], ['foo', 20], ['foo', 20]]
これは通常、あなたが望むものではありません。for
リスト内包表記は、ループの反復ごとに左側 (式の前の部分) の式を再評価し、外側のリストの各インデックスに対して新しいリストを作成します。
>>> lis = [[10, 20] for _ in range(3)]
>>> lis[0][0] = 'foo'
>>> lis
[['foo', 20], [10, 20], [10, 20]]
変数に保存されたリストを繰り返し使用する場合は、反復ごとにコピーを作成してください。
[pos[:] for _ in range(3)]