如何在python中创建相同元组的列表

nos*_*nos 0 python tuples list

乡亲,

我想创建以下列表,但不是3次重复,我想要重复12次.有没有办法在没有明确键入12次的情况下执行此操作?非常感谢您的帮助.

[(0,pi), (0,pi), (0,pi)]
Run Code Online (Sandbox Code Playgroud)

Ble*_*der 8

您可以使用列表理解:

l = [(0, pi) for i in range(12)]
Run Code Online (Sandbox Code Playgroud)

替代方法(乘以列表)可能适用于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
Run Code Online (Sandbox Code Playgroud)

除了字符串之外,我个人远离那种方法.


Lev*_*von 6

这将与元组一起使用(但不建议用于列表):

  myl=[(0,pi)] * 12
Run Code Online (Sandbox Code Playgroud)

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)]
Run Code Online (Sandbox Code Playgroud)

正如@senderle在下面的一个有用的评论中提到的,这是一个很好的方法,因为元组是不可变的.这对于列表来说不是一种安全的方法,因为它可能会产生意想不到的结果,如下例所示.

元组与列表:

有元组:

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
Run Code Online (Sandbox Code Playgroud)

有了列表:

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!
Run Code Online (Sandbox Code Playgroud)