我正在尝试在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的数学意义上使用,但不是作为赋值(在数学中意义为:=)。
答案 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[:]
其中标识切片(从头到尾切片)创建一个包含浅拷贝的新列表。