Ho un elenco di valori che devo filtrare dati i valori in un elenco di valori booleani:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Genero un nuovo elenco filtrato con la seguente riga:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
che si traduce in:
print filtered_list
[1,4]
La linea funziona ma sembra (per me) un po 'eccessiva e mi chiedevo se ci fosse un modo più semplice per ottenere lo stesso.
consigli
Riepilogo di due buoni consigli forniti nelle risposte seguenti:
1- Non nominare un elenco filtercome ho fatto perché è una funzione integrata.
2- Non confrontare le cose con Truequelle che ho fatto if filter[idx]==True..visto che non sono necessarie. Basta usare if filter[idx]è abbastanza.
if filter[indx] == TrueDo Non utilizzare ==se si vuole verificare la presenza di identità True, utilizzo is. Comunque in questo caso l'intero confronto è inutile, potresti semplicemente usarlo if filter[indx]. Infine: non usare mai il nome di un built-in come nome di variabile / modulo (mi riferisco al nome filter). Usando qualcosa del genere included, in modo che la iflettura sia corretta ( if included[indx]).