使用multiply创建包含列表的列表

时间:2014-02-20 20:50:25

标签: python list

>>> a = []
>>> b = [a*2]
>>> b
[[]]
>>> b = [copy.deepcopy(a)*2]
>>> b
[[]]

我正在尝试将b创建为包含两个a副本的列表。为什么b不是[[],[]]?我怎样才能使b[[],[]]

3 个答案:

答案 0 :(得分:5)

如果您要在其中创建带有a的b 两次

a = []
b = [a] * 2

但要注意,列表是mutable

b[1].append('foo')
b
[['foo'], ['foo']]

如果您想使用a的两个副本创建b:

b = [a[:] for i in range(2)]

为了更好地控制副本的性质(vs绑定),请阅读python copy模块文档。

答案 1 :(得分:0)

您可以尝试此b = [a for i in xrange(2)]

答案 2 :(得分:0)

乘以列表* 2,与将其添加到自身相同,正如预期的那样。但如果你这样做:

a = [1]
b = [2]
a + b
[1, 2]

请注意,您没有获得[[1], [2]] - 这不是将列表添加到一起的意思。添加两个列表会为您提供一个列表,其中包含两个列表中的所有元素。

因此,在这些行中,[] * 2会生成一个类似[]的列表,因为如果您执行[] + [],那么这也是您所得到的 - 包含其中两个列表中所有元素的列表,因为两个输入列表都是空的,所以也是空的。然后,您将其放在另一个列表中,最后得到[[]]

其他答案已经涵盖了其他方法,因此我不会重复这些。