2013-09-21 104 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。 –