伙计们,
我想创建以下列表,但不是 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 在下面的有用评论中提到的那样,这是一种很好的方法,因为元组是不可变的。这对于列表来说不是一种安全的方法,因为它可能会产生意想不到的结果,如下面的示例所示。
元组与列表:
使用元组:
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!