2014-09-03 121 views
0

我想添加列表中的元素在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运算符在数学意义上被用于Python,但不作为赋值(在数学意义上:=)。

回答

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[:] 

在身份切片(从开始到结束切片)创建包含浅拷贝一个新的列表。