在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]]
你能帮我吗?
答案 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)