2015-11-10 130 views
1

我已經創建了一個python函數,它應該採用一系列3D座標並將它們放置在列表中(在列表中)。list.append()似乎不能正常工作

然而,當我打印出來coord_list,它似乎並不正確添加,例如,當輸入這些座標:

[1,2,3] 

[2,3,4] 

[3,4,5] 

coord_list的最終輸出(忽略「Q」)會是:[[3,4,5],[3,4,5],[3,4,5]]

爲什麼它不能正確追加,以及如何解決這個問題?

def coords() : 

    xyz_list = [] 
    coord_list = [] 

    while 1 : 
     xyz = raw_input("Enter co-ordinates (x,y,z) enter 'q' when done: ") 
     xyz = str(xyz) 

     del xyz_list[:] 

     for num in xyz.split(","): 
      xyz_list.append(num) 

     print xyz_list 

     if xyz[0] != 'q' : 
      coord_list.append(xyz_list) 
      print coord_list 
     else : 
      break 

coords() 
+0

我測試了你的腳本,沒關係。 – Zety

+1

您能否更具體地說明「爲什麼不能正確追加」?你認爲它應該做什麼? – Erik

回答

1

問題在於訪問託管堆的del。新對象(xyz_list的成員)出現在同一地點,因爲包含列表未被刪除。因此,列表成員在原來的位置替換了以前的列表,coord_list中的參考將指向新的值。

繁殖蟒蛇2.7.9(Linux)的:

$ python coords.py 

Enter co-ordinates (x,y,z) enter 'q' when done: 1,2,3 
['1', '2', '3'] 
[['1', '2', '3']] 
Enter co-ordinates (x,y,z) enter 'q' when done: 2,3,4 
['2', '3', '4'] 
[['2', '3', '4'], ['2', '3', '4']] 
Enter co-ordinates (x,y,z) enter 'q' when done: 3,4,5 
['3', '4', '5'] 
[['3', '4', '5'], ['3', '4', '5'], ['3', '4', '5']] 

我做了一個小改動劇本:del xyz_list[:] - >xyz_list = []

現在,它的工作原理:

def coords() : 

    xyz_list = [] 
    coord_list = [] 

    while 1 : 
     xyz = raw_input("Enter co-ordinates (x,y,z) enter 'q' when done: ") 
     xyz = str(xyz) 

     for num in xyz.split(","): 
      xyz_list.append(num) 

     print xyz_list 

     if xyz[0] != 'q' : 
      coord_list.append(xyz_list) 
      print coord_list 
      xyz_list = [] 
     else : 
      break 

coords() 

輸出:

$ python coords.py 

Enter co-ordinates (x,y,z) enter 'q' when done: 1,2,3 
['1', '2', '3'] 
[['1', '2', '3']] 
Enter co-ordinates (x,y,z) enter 'q' when done: 2,3,4 
['2', '3', '4'] 
[['1', '2', '3'], ['2', '3', '4']] 
Enter co-ordinates (x,y,z) enter 'q' when done: 3,4,5 
['3', '4', '5'] 
[['1', '2', '3'], ['2', '3', '4'], ['3', '4', '5']] 
+1

謝謝,有時候一個簡單的錯誤會讓你瘋狂 – tombam95

2

這是因爲coord_list被存儲[xyz_list, xyz_list, ...]。您在每次迭代中更新xyz_list,而這個迭代又在coord_list中更新。

1

它添加到coord_list後刪除del和清除列表xyz_list

Enter co-ordinates (x,y,z) enter 'q' when done: 1,2,3 
['1', '2', '3'] 
[['1', '2', '3']] 
Enter co-ordinates (x,y,z) enter 'q' when done: 4,5,6 
['4', '5', '6'] 
[['1', '2', '3'], ['4', '5', '6']] 
0

我測試腳本,這是結果[['3','4','5'],[' 3','4','5'],['3','4','5']]

如果你想在列表中的整數,只是這樣做:

for num in xyz.split(","): 
    xyz_list.append(int(num)) 

可能是你應該限制使用num, num, num用戶。

相關問題