Python - 将一个列表附加到另一个列表

时间:2014-04-26 23:03:35

标签: python list

在我的项目中,我有一个稍微困难的代码和平,但它的行为与这个代码完全相同:

seq = []
a = []

for i in range(3):
    a[:] = []
    a.append(i)
    a.append(i)

    seq.append(a)
    print seq

它作为输出:

[[0, 0]]

[[1, 1], [1, 1]]

[[2, 2], [2, 2], [2, 2]]

虽然我希望它是:

[[0, 0]]

[[0, 0], [1, 1]]

[[0, 0], [1, 1], [2, 2]]

我做错了什么?

2 个答案:

答案 0 :(得分:1)

在循环内移动a的初始化,目前您一次又一次地将同一个列表对象追加到seq

for i in range(3):
    a = []       #or simply a = [i] * 2
    a.append(i)
    a.append(i)

    seq.append(a)
    print seq 

如果您在程序结束时打印seq项目的id()项,您将获得相同的ID()。所以,所有这些都是对同一个列表对象的引用:

print [id(x) for x in seq]
#[1095704328L, 1095704328L, 1095704328L]

In [106]: a = []

In [107]: seq = [a, a, a]

In [108]: a.append(1)

In [109]: seq
Out[109]: [[1], [1], [1]]

In [110]: a.append(2)

In [111]: seq
Out[111]: [[1, 2], [1, 2], [1, 2]]

答案 1 :(得分:1)

请尝试以下代码:

seq = []
a = []

for i in range(3):
    a = []
    a.append(i)
    a.append(i)

    seq.append(a)
    print seq

运行如下:

>>> a = []
>>> seq = []
>>> for i in range(3):
...     a = []
...     a.append(i)
...     a.append(i)
...     seq.append(a)
...     print seq
... 
[[0, 0]]
[[0, 0], [1, 1]]
[[0, 0], [1, 1], [2, 2]]
>>> 

您的问题是,即使您添加了不同的值,但在更改a后,seq中的值也会发生变化。