1

皆さん、

次のリストを作成したいのですが、3回の繰り返しではなく、12回の繰り返しが必要です。明示的に12回入力せずにそれを行う方法はありますか? どうもありがとうございました。

[(0,pi), (0,pi), (0,pi)]
4

2 に答える 2

9

リスト内包表記を使用できます。

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

私は個人的に、文字列以外ではその方法を避けています。

于 2012-08-21T03:03:28.030 に答える
6

これはタプルで機能します (ただし、リストにはお勧めしません):

  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!
于 2012-08-21T03:04:14.297 に答える