Mam listę wartości, które muszę filtrować, biorąc pod uwagę wartości na liście wartości logicznych:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Generuję nową listę filtrowaną z następującym wierszem:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
Co skutkuje w:
print filtered_list
[1,4]
Linia działa, ale wygląda (dla mnie) trochę przesadzona i zastanawiałem się, czy istnieje prostszy sposób na osiągnięcie tego samego.
Porady
Podsumowanie dwóch dobrych rad zawartych w poniższych odpowiedziach:
1- Nie nazywaj listy filtertak jak ja, ponieważ jest to funkcja wbudowana.
2- Nie porównuj rzeczy z Truetymi, które zrobiłem, if filter[idx]==True..ponieważ jest to niepotrzebne. Wystarczy użyć if filter[idx].
if filter[indx] == TrueCzy nie używać ==, jeśli chcesz sprawdzić identyczności True, zastosowania is. Zresztą w tym przypadku całe porównanie jest bezużyteczne, możesz po prostu użyć if filter[indx]. Wreszcie: nigdy nie używaj nazwy wbudowanej jako nazwy zmiennej / modułu (mam na myśli nazwę filter). Używając czegoś w stylu included, żeby ifładnie się czyta ( if included[indx]).