皆さん、
次のリストを作成したいのですが、3回の繰り返しではなく、12回の繰り返しが必要です。明示的に12回入力せずにそれを行う方法はありますか? どうもありがとうございました。
[(0,pi), (0,pi), (0,pi)]
リスト内包表記を使用できます。
l = [(0, pi) for i in range(12)]
別の方法 (リストを乗算する) は、tuple
オブジェクトが不変であるため機能する可能性がありますが、オブジェクトで試してみると、髪が引き裂かれlist
ます。
>>> pi = 3
>>> l = [[0, pi]] * 4
>>> l
[[0, 3], [0, 3], [0, 3], [0, 3]]
>>> l[0][1] = 4
>>> l
[[0, 4], [0, 4], [0, 4], [0, 4]] # Wat
私は個人的に、文字列以外ではその方法を避けています。
これはタプルで機能します (ただし、リストにはお勧めしません):
myl=[(0,pi)] * 12
与えるmyl
[(0, 3.14), (0, 3.14), (0, 3.14), (0, 3.14), (0, 3.14), (0, 3.14),
(0, 3.14), (0, 3.14), (0, 3.14), (0, 3.14), (0, 3.14), (0, 3.14)]
以下の役立つコメントで @senderle が言及しているように、タプルはimmutableであるため、これは良いアプローチです。以下の例に示すように、予期しない結果が生じる可能性があるため、これはリストでの安全なアプローチではありません。
タプルとリスト:
タプルの場合:
In [69]: myl=[(0,pi)] * 3
In [70]: myl
Out[70]: [(0, 3.14), (0, 3.14), (0, 3.14)]
In [71]: myl[0][0] = 55
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
----> 1 myl[0][0] = 55
TypeError: 'tuple' object does not support item assignment
リスト付き:
In [72]: myl=[[0,pi]] * 3
In [73]: myl
Out[73]: [[0, 3.14], [0, 3.14], [0, 3.14]]
In [74]: myl[0][0] = 55
In [75]: myl
Out[75]: [[55, 3.14], [55, 3.14], [55, 3.14]] # every list element changes!