2017-11-21 1 views
0

Ich versuche, Elemente aus meiner Liste zu entfernen, wenn eine Bedingung wahr ist, und dann am Anfang der Liste erneut zu iterieren. Im Anschluss ist mein Code:Bedingtes Entfernen von Elementen aus der Liste und Iteration von Anfang an durch Python-Schleife

from random import randint 
x = [1,2,3,4,5] 

for item in x: 
    print("item is " + str(item)) 
    z = randint(1, 5) 
    print("z is " + str(z)) 
    if z == item: 
     x[:] = [item for item in x if item != z] 
     print("Remaining list is " + str(x)) 
    else: 
     print("Remaining list is " + str(x)) 

So zum Beispiel, mein erstes Element in der Liste x 1 und läßt 1. z sagen ist auch, wenn z == item, entfernt meine x Liste das erste Element (1) und wird aktualisiert [2,3,4,5]. Aber ich bekomme die folgende Ausgabe:

item is 1 
z is 1 
Remaining list is [2, 3, 4, 5] 
item is 3 
z is 2 
Remaining list is [2, 3, 4, 5] 

Anstatt die Schleife von 2 in meiner kürzlich aktualisierte Liste Neustart [2,3,4,5], beginnt die Schleife von der zweiten Position, die 3. ist Wie kann ich Neustart der Schleife von Anfang an jedes Mal, wenn meine Liste aktualisiert wird? Danke!

+0

Wenn Sie die Größe von Listen ändern, während Sie darüber iterieren, führt dies zu einer Reihe von Fehlern hintereinander. Erstellen Sie stattdessen eine neue Liste und ersetzen Sie dann die alte Liste am Ende der Schleife. –

Antwort

1

Sie können eine while-Schleife außerhalb Ihrer for-Schleife hinzufügen und die for-Schleife erneut starten, wenn Sie ein Element entfernen.

from random import randint 
x = [1,2,3,4,5] 

restart = True 

while restart: 
    restart = False 
    for item in x: 
     print("item is " + str(item)) 
     z = randint(1, 5) 
     print("z is " + str(z)) 
     if z == item: 
      x[:] = [item for item in x if item != z] 
      print("Remaining list is " + str(x)) 
      restart = True 
      break 
     else: 
      print("Remaining list is " + str(x)) 

# results 
item is 1 
z is 2 
Remaining list is [1, 2, 3, 4, 5] 
item is 2 
z is 2 
Remaining list is [1, 3, 4, 5] 
item is 1 
z is 1 
Remaining list is [3, 4, 5] 
item is 3 
z is 4 
Remaining list is [3, 4, 5] 
item is 4 
z is 3 
Remaining list is [3, 4, 5] 
item is 5 
z is 5 
Remaining list is [3, 4] 
item is 3 
z is 4 
Remaining list is [3, 4] 
item is 4 
z is 1 
Remaining list is [3, 4] 
+0

Vielen Dank für die Antwort! – gibbz00

1

For Schleifen nicht so, wie sie Sie erwarten nicht funktionieren, wenn Sie while mit bedingter Prüfung wie folgt verwenden können, besser ist:

from random import randint 
    x = [1, 2, 3, 4, 5] 
    loops = 0 
    while loops<len(x): 
     item = x[loops] 
     print("item is " + str(item)) 
     z = randint(1, 5) 
     print("z is " + str(z)) 
     if z == item: 
      x[:] = [item for item in x if item != z] 
      print("Remaining list is " + str(x)) 
      continue 
     else: 
      print("Remaining list is " + str(x)) 
     loops += 1 

Ausgang:

item is 1 
z is 1 
Remaining list is [2, 3, 4, 5] 
item is 2 
z is 2 
Remaining list is [3, 4, 5] 
item is 3 
z is 1 
Remaining list is [3, 4, 5] 
item is 4 
z is 2 
Remaining list is [3, 4, 5] 
item is 5 
z is 1 
Remaining list is [3, 4, 5] 
+0

Vielen Dank für Ihre Antwort! – gibbz00

Verwandte Themen