0

Ich versuche, ein Programm, das eine Textdatei von Namen und Zahlen lesen wird und machen es in ein 2D-Array mit den Namen und Nummern, dann entfernen Sie das Element aus dem Array, wenn die Zahl ist 1. Der Code, den ich geschrieben habe, um auf den Index im 2d-Array zuzugreifen, funktioniert jedoch nicht und löst den Fehler "IndexError: Listenindex außerhalb des Bereichs" aus. Dies ist der Code-Block, das nicht funktioniert:Python mehrdimensionale Array-Liste Index außerhalb des Bereichs

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

Dies ist die Rückverfolgung ist:

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

Dies ist ein Beispiel dafür, was list2 aussehen könnte:

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

Was mache ich falsch, und wie greife ich korrekt auf den zweiten Teil (in diesem Fall die Anzahl) der Artikel im Array zu?

+1

Sie ändern die Länge der Liste, während Sie darüber iterieren. Es führt normalerweise immer zu Problemen. Gibt es einen logischen Grund, dass Sie das tun müssen? – Luca

+0

Ein Listenverständnis könnte ein sauberer Weg sein, die '1' Werte ohne 'pop()' zu entfernen: 'list_without_ones = [Element für Element in Liste2 wenn Element [1]! = 1]'. Erstellen Sie eine Kopie von "list2", die die unerwünschten Werte herausfiltert –

Antwort

0

Falls Sie nur einige Elemente aus der Liste entfernen Sie es vom Ende zum Anfang laufen könnten, die Sie Elemente ohne IndexError verursacht zu entfernen erlauben würden:

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) 

Ausgang:

[['Jane Smith', 0]] 

Natürlich könnten Sie einfach list comprehension verwenden, um eine neue Liste zu erstellen:

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