迭代地将元素添加到列表中

时间:2014-09-03 17:29:13

标签: python list iterator variable-assignment

我正在尝试在Python中添加列表元素,从而生成列表列表。假设我有两个列表a = [1,2]b = [3,4,5]。如何构建以下列表:

c = [[1,2,3],[1,2,4],[1,2,5]] ?

在我徒劳地尝试生成c时,我偶然发现了一个错误的Python概念,我想在下面对其进行描述。如果有人详细阐述该段末尾提出的概念性问题,我将不胜感激。我尝试(除其他外)生成c如下:

c = []
for i in b:
   temp = a
   temp.extend([i])
   c += [temp]

令我感到困惑的是a似乎被临时覆盖了。为什么会这样?似乎=运算符在Python的数学意义上使用,但不是作为赋值(在数学中意义为:=)。

1 个答案:

答案 0 :(得分:2)

您没有创建副本; temp = a仅使temp引用相同的列表对象。因此,temp.extend([i])扩展了相同的列表对象a引用

>>> a = []
>>> temp = a
>>> temp.extend(['foo', 'bar'])
>>> a
['foo', 'bar']
>>> temp is a
True

您可以使用列表理解构建c

c = [a + [i] for i in b]

通过连接而不是扩展,每次迭代都会创建一个新的列表对象。

您也可以使用:

制作a的实际副本
temp = a[:]

其中标识切片(从头到尾切片)创建一个包含浅拷贝的新列表。