Mam listę wartości, które muszę filtrować, biorąc pod uwagę wartości z listy wartości logicznych:
list_a = [1, 2, 4, 6] filter = [True, False , True, False]
Generuję nową filtrowaną listę z następującym wierszem:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
co powoduje:
print filter_list [1,4]
Linia działa, ale wygląda (dla mnie) trochę przesadnie i zastanawiałem się, czy istnieje prostszy sposób na osiągnięcie tego samego.
Porady
Podsumowanie dwóch dobre rady podane w poniższych odpowiedziach:
1- Nie nazywaj listy filtrem
tak jak ja, ponieważ jest to funkcja wbudowana.
2- Nie porównuj rzeczy z True
, tak jak zrobiłem to z if filter[idx]==True..
, ponieważ nie jest to konieczne. Po prostu użyj if filter [idx]
wystarczy.