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

元组与列表:

使用元组:

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 回答