2016-08-31 8 views
0

Ich versuche, von Code, indem jedes Element in der Schleife eine Python-Liste zu löschenListe löscht unerwartetes Verhalten

x=list(range(10000)) 
for i in x: 
    x.remove(i) 

Ich dachte, dass nach diesem Code x[] sein muss, sondern nur jeder Das zweite Element der Liste wird entfernt. len (x) = 5000 anstelle von .

Warum ist es so? Was mache ich falsch. Danke

+1

Oder http://stackoverflow.com/questions/6022764/python-removing-list-element-while-iterating-over-list –

Antwort

1

Wenn Sie eine Python-Liste löschen möchten, wie Sie tun, ist der richtige Weg, nur x.clear verwenden, Dokumente über diese Methode here, jetzt, wenn Sie Elemente entfernen möchten einige ausgefallene Bedingungen arbeiten, verwenden Sie nur filter, Beispiel Löschen des gesamten x Liste:

x = list(range(10000)) 
x = filter(lambda x: False, x) 
print x 
1

Die a.remove (i) vermasselt die Indizierung ist meine Vermutung.

statt

a.clear() 

Es ist eine gute Möglichkeit, eine Liste löschen verwenden.

0

Wenn Sie eine Liste Objekt implementieren möchten, die sich über ihr bei der Iteration löscht, die ziemlich einfach sein würde:

class ErasingList(list): 
    "a list implemented as an iterator, iterating over it will .pop() items off" 
    def __iter__(self): 
     return self 
    def __next__(self): 
     try: 
      return self.pop(0) 
     #or self.pop() to take from the end of the list which is less intuitive but more efficient 
     except IndexError: 
      raise StopIteration 
    next = __next__ #vs2 compatibility. 

x = ErasingList(range(100)) 

for i in x: 
    print(i) 

print(x) 
0
original_list = list(range(1000)) 
remove_list_elements = [] 

for i in range(0, len(original_list), 2): 
    remove_list_elements.append(original_list[i]) 

[original_list.remove(i) for i in remove_list_elements] 
print(len(original_list))