列表附加在for循环中的列表中

时间:2020-03-23 15:55:42

标签: python

在Python中,我无法创建一个列表,其中每个项目都是一个不同的列表。 这是一个示例:

a = [1,2,3,4,5,6,7,8,9]
b = []
c = []

for i in a:
  b.append(i)
  c.append(b)
c

结果是:

[[1, 2, 3, 4, 5, 6, 7, 8, 9],
 [1, 2, 3, 4, 5, 6, 7, 8, 9],
 [1, 2, 3, 4, 5, 6, 7, 8, 9],
 [1, 2, 3, 4, 5, 6, 7, 8, 9],
 [1, 2, 3, 4, 5, 6, 7, 8, 9],
 [1, 2, 3, 4, 5, 6, 7, 8, 9],
 [1, 2, 3, 4, 5, 6, 7, 8, 9],
 [1, 2, 3, 4, 5, 6, 7, 8, 9],
 [1, 2, 3, 4, 5, 6, 7, 8, 9]]

相反,我会得到的是:

[[1],
 [1, 2],
 [1, 2, 3],
 [1, 2, 3, 4],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4, 5, 6],
 [1, 2, 3, 4, 5, 6, 7],
 [1, 2, 3, 4, 5, 6, 7, 8],
 [1, 2, 3, 4, 5, 6, 7, 8, 9]]

你能帮我吗?

2 个答案:

答案 0 :(得分:2)

通过执行c.append(b),您将放置 the b实例,因此b在c中无处不在,并且在填充b时,您会在{{ 1}},您需要使用以下方式进行复制

c

关于任务本身,我提出了另一种方法:

c.append(list(b))
c.append(b[:])

对应于列表理解中的for end in a: c.append(list(range(1, end + 1)))

答案 1 :(得分:1)

Python中,变量将references保留在Objects中。当您将列表b附加到另一个列表c时,基本上是将b的引用复制到列表c(不是对象的内容)。由于list是可变的,因此当您修改列表b(将其追加到列表c之后)时,它的更新值也将反映在c中。

尝试以下代码以了解更多信息:

a = [10]
c = a
a.append(100)
print(c)

输出:

[10, 100]

您可以执行以下操作:

c.append(b[:])

OR

c.append(list(b))

OR

您还可以在Python中使用deepcopy

import copy
a = [1,2,3,4,5,6,7,8,9]
b = []
c = []

for i in a:
    b.append(i)
    c.append(copy.deepcopy(b))
print(c)