0

我試圖做一個程序,將讀取名稱和數字的文本文件,並將其與名稱和數字的2d數組,然後從數組中刪除項目if數字爲1.但是,我寫入的用於訪問2d數組中索引的代碼不起作用,並且引發錯誤「IndexError:list index out of range」。這是代碼不工作的模塊:Python的多維數組列表索引超出範圍

for i in range(x): 
    list2[i][1] = int(list2[i][1]) 
    if int(list2[i][1]) == 1: 
     list2.pop(i) 

這是回溯:

File "/Users/cat/PycharmProjects/myCS106/Names.py", line 16, in updateNames 
list2[i][1] = int(list2[i][1]) 
IndexError: list index out of range 

這是列表2是什麼樣子的例子:

[["John Doe","1"],["Jane Smith","0"],["Firstname Lastname","1"]] 

什麼我做錯了,我如何正確訪問數組中的項目的第二部分(在這種情況下,數量)?

+1

您在迭代時正在更改列表的長度。它通常總是會導致問題。有什麼合乎邏輯的理由需要這樣做嗎? – Luca

+0

列表理解可能是一個乾淨的方法,可以在不使用pop()的情況下刪除'1'值: list_without_ones = [元素 對於列表2中的元素 如果元素[1]!= 1]''。也就是說,創建一個'list2'副本來過濾不需要的值 –

回答

0

如果你只是想從列表中刪除一些元素,你可以從年底開始遍歷它,這將允許你刪除的項目,而不會造成IndexError

list2 = [["John Doe","1"],["Jane Smith","0"],["Firstname Lastname","1"]] 

for i in range(len(list2) - 1, -1, -1): 
    list2[i][1] = int(list2[i][1]) 
    if int(list2[i][1]) == 1: 
     list2.pop(i) 

print(list2) 

輸出:

[['Jane Smith', 0]] 

當然你可以用list comprehension創建一個新列表:

list2 = [[x[0], int(x[1])] for x in list2 if int(x[1]) != 1]