Ich habe eine Liste von Werten, die ich filtern muss, wenn die Werte in einer Liste von Booleschen Werten enthalten sind:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Ich erstelle eine neue gefilterte Liste mit der folgenden Zeile:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
was in ... endet:
print filtered_list
[1,4]
Die Linie funktioniert, sieht aber (für mich) etwas übertrieben aus und ich habe mich gefragt, ob es einen einfacheren Weg gibt, dasselbe zu erreichen.
Ratschläge
Zusammenfassung von zwei guten Ratschlägen in den folgenden Antworten:
1- Benennen Sie eine Liste nicht filter
wie ich, da es sich um eine integrierte Funktion handelt.
2- Vergleichen Sie Dinge nicht so, True
wie ich es getan habe, if filter[idx]==True..
da dies unnötig ist. Nur zu benutzen if filter[idx]
ist genug.
if filter[indx] == True
Sie nicht verwenden , ==
wenn Sie für Identität überprüfen möchten mit True
, Verwendung is
. Wie auch immer, in diesem Fall ist der gesamte Vergleich nutzlos, Sie könnten ihn einfach verwenden if filter[indx]
. Zuletzt: Verwenden Sie niemals den Namen eines integrierten Systems als Variablen- / Modulnamen (ich beziehe mich auf den Namen filter
). Mit so etwas wie included
, damit das if
schön liest ( if included[indx]
).