人,
我想创建以下列表,但不是3次重复,我想要重复12次。有没有办法在没有明确键入12次的情况下执行此操作?非常感谢你的帮助。
[(0,pi), (0,pi), (0,pi)]
答案 0 :(得分:8)
您可以使用列表理解:
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
我个人远离那个方法而不是字符串。
答案 1 :(得分: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在下面的一条有用的评论中提到的,这是一个很好的方法,因为元组是不可变的。这将不是一个带有列表的安全方法,因为它可能会产生意想不到的结果,如下例所示。
元组与列表:
使用元组:
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!