2017-04-23 7 views
0

Ich möchte leere Liste und NoneType-Liste in meiner Liste von Listen entfernen. Dies ist ein Beispiel.Python-Listenverständnis. Entfernen von NoneType oder emty Liste aus Liste der Liste

new_pop=[[[0,1,2,3],[4,5,6]],[[],[8,9]],[[1,2,3],None]] 


value = None 
empty =[] 
for i in range(len(new_pop)): 
    if value in new_pop[i] and [] in new_pop[i]: 
     new_pop.remove(new_pop[i]) 

print(new_pop) 

mein Wunsch Ergebnis ist

new_pop=[[[0,1,2,3],[4,5,6]]] 
+0

Mein Code gibt mir nicht das gewünschte Ergebnis. Bitte helfen Sie! ich danke dir sehr! – user02

+1

Was mit '[8,9]' und '[1,2,3]' geschehen soll, die weder 'None' noch' [] 'sind – AChampion

+0

Oh, ich sehe. Wie soll ich es beheben? – user02

Antwort

1
new_pop = [sub for sub in new_pop if not (None in sub or [] in sub)] 

Ihr Code hat zwei Fehler:

  1. Sie verwenden and. sub = [[],[8,9]] erfüllt None in sub aber nicht None in sub and [] in sub, weil es [] in sub nicht erfüllt. Sie benötigen or.

  2. Sie entfernen Elemente aus einer Liste, während Sie darüber iterieren. TU das niemals. Erstellen Sie immer eine neue Liste, wie ich es hier getan habe.

+0

Vielen Dank! – user02

1

Wenn alles, was Sie zu tun versuchen, ist jede Unterliste zu entfernen, die None oder [] umfasst dann unter der Annahme, dass alle Artikel im Teil-Listen sind list s mit dem Inhalt, dann können Sie eine Wache von all() verwenden:

>>> [x for x in new_pop if all(x)] 
[[[0, 1, 2, 3], [4, 5, 6]]] 
+0

Clever, aber riskant. Es sieht hier nicht so aus, aber vielleicht kann die Liste andere falsche Dinge enthalten. –

+0

Einverstanden, aber unter der Annahme, dass die Unterliste Listen mit Inhalten enthält, die nicht falsch sind, sollte es tun, was benötigt wird. – AChampion

+0

Vielen Dank !!!!! – user02

Verwandte Themen