Python:通过迭代列表将项目附加到列表

3
我是一位从C语言转过来的Python新手。我正在尝试实现与C语言中的数组指针等效的逻辑。我想通过迭代这些列表的列表来将一个项目附加到这些列表的末尾。我有以下代码:
data = [10, 20, 30]
list1 = list2 = list3 = list()
lists = [list1, list2, list3]

for i in range(len(data)):
    lists[i].append(data[i])

for lst in lists:
    print lst

然而,它的结果是:
[10, 20, 30]
[10, 20, 30]
[10, 20, 30]

替代方案:

[10]
[20]
[30]

我无法解释为什么这段代码未能产生预期的输出,是否有其他方法可以实现此目的?

一次循环不足以解决这个问题,我想。 - Prinz Km
1个回答

3
你只需创建一个列表。
list1 = list2 = list3 = list()

这行代码创建一个空列表,将其引用分配给list3,将list3引用分配给list2list1,因此它们都引用同一个对象。因此,当您添加值时,它们会添加到所有“列表”中。
这个很好用。
data = [10, 20, 30]
lists = [[], [], []]

for i in range(len(data)):
    lists[i].append(data[i])

for lst in lists:
    print lst

但最简单的方法就是只做这个。
data = [10, 20, 30]
lists = [ [x] for x in data ]

列表推导式确实是最简单的方法,但值得注意的是我们还可以将循环表述为 for i,v in enumerate(data): lists[i].append(v) 或者 for lst,value in zip(lists,data): lst.append(value)。不必要地使用索引有一点像 C 语言。 - Yann Vernier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接