2016-08-08 14 views
0

Ich habe versucht, mit dieser Reihenfolge zu löschen: 11,12,13,21,22,23,31,32,33 und mit einer leeren Liste bleiben. am Anfang versuchte ich die regelmäßige Löschung, aber dann habe ich verstanden, dass Sie int zum Löschen verwenden müssen und Sie können nicht Sie das Objekt, also habe ich begonnen, Enumerate-Funktion zu verwenden, aber ich sah ein anderes Problem. Es war löschen aber nicht die ganze Liste nur ein Teil davon. Gibt es eine Möglichkeit, die in dieser Reihenfolge zu löschen?löschen Python-Liste in der richtigen Reihenfolge

b = [[['11'],['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 

for i,index in enumerate(b): 
    for j,jindex in enumerate(index): 
     print(b) 
     jindex = jindex[j+1:] 
    index = index[i+1:] 
print(b) 

print('\nnew try\n\n') 

b = [[['11'],['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 
for i,index in enumerate(b): 
    for j,jindex in enumerate(index): 
     print(b) 
     del jindex[j::] 
    del b[i::] 
print(b) 

print('\nnew try\n\n') 

b = [[['11'],['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 

for i,index in enumerate(b): 
    for j,jindex in enumerate(index): 
     print(b) 
     del jindex[j] 
    del index[i] 
print(b) 

print('\nnew try\n\n') 

b = [[['11'],['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 

for i,index in enumerate(b): 
    for j,jindex in enumerate(index): 
     print(b) 
     del b[i][j] 
    del b[i] 
print(b) 

meine Ausgabe:

[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 

new try 


[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[[], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[[], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[] 

new try 


[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[[], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
Traceback (most recent call last): 
    File "/Users/asaf/PycharmProjects/first/openurl.py", line 28, in <module> 
    del jindex[j] 
IndexError: list assignment index out of range 

Process finished with exit code 1 

, die das Ergebnis Ich bin sucht:

[[['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 
[[['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 
[[['21'],['22'],['23']],[['31'],['32'],['33']]] 
[[['22'],['23']],[['31'],['32'],['33']]] 
[[['23']],[['31'],['32'],['33']]] 
[[['31'],['32'],['33']]] 
[[['32'],['33']]] 
[[['33']]] 
[[]] 
+0

Sie versuchen, alle Elemente in der Liste zu löschen? Oder löschen Sie alle Elemente der Unterliste? Und wenn ja, warum ist die Bestellung wichtig? –

+0

Mit anderen Worten, welches Ergebnis möchten Sie? –

+0

Das Ergebnis ist eine leere Liste. Es ist wichtig, weil es Strings innerhalb sein soll, und ich möchte den Rest des Textes Schritt für Schritt verschieben. Ich habe einen großen Text und ich muss es auf wenige Nachrichten aufteilen. – asaf

Antwort

0

Das Problem ist, dass Sie über Ihre Liste iterieren, während es zu ändern. Dies wird oft das genaue Problem verursachen, dem Sie begegnen. Stattdessen müssen Sie über Indizes iterieren (eher wie ein Klassisch-für-Schleife) und die Liste modifizieren. Beachten Sie jedoch, dass Sie berücksichtigen müssen, dass der Index, den Sie löschen möchten, nicht mit dem Index übereinstimmt, über den Sie iterieren. Stattdessen löschen Sie immer das erste Element Ihrer Unterliste und dann die Unterliste selbst in der äußeren Schleife (mit Ausnahme der letzten Iteration).

>>> b = [[['11'],['12'],['13']],[['21'],['22'],['23']],[['31'],['32'],['33']]] 
>>> for sublength in [len(sub) for sub in b]: 
... for _ in range(sublength): 
...  print(b) 
...  del b[0][0] 
... if len(b) > 1: # or else you'll end up with [] 
...  del b[0] 
... 
[[['11'], ['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['12'], ['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['13']], [['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['21'], ['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['22'], ['23']], [['31'], ['32'], ['33']]] 
[[['23']], [['31'], ['32'], ['33']]] 
[[['31'], ['32'], ['33']]] 
[[['32'], ['33']]] 
[[['33']]] 
>>> print(b) 
[[]] 
>>> 
+0

was der Unterstrich in dieser Zeile -> (für _ in Bereich (Unterlänge):) bedeuten? – asaf

+0

@asaf Es bedeutet nichts. Es ist wie jeder andere Variablenname. Es ist nur eine Konvention, die anzeigt, dass Sie die Looping-Variable nicht verwenden werden, um tatsächlich etwas zu tun. Es hätte genauso leicht für x in der Nähe (sulength) sein können: ' –