2013-09-21 108 views
3

我是一个Python新手从C穿越而过,我基本上是试图实现逻辑等同于数组指针的C.的Python:通过列表

数组我想要的清单迭代追加项目名单通过迭代这些列表的列表,将一个项目附加到一堆列表的末尾。我有以下代码:

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] 

我无法解释为什么这个代码未能产生预期的输出,有没有其他的方式来做到这一点?

+0

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 ] 
+0

列表内涵确实是最简单的PBLM,但它的还值得注意的是,我们可以在zip(列表,数据)中将循环表示为'for i,v in enumerate(data):lists [i] .append(v)'或'for lst,value:lst.append )'。不必要地使用索引是一个C-ISM。 –