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 filter
come ho fatto perché è una funzione integrata.
2- Non confrontare le cose con True
quelle che ho fatto if filter[idx]==True..
visto che non sono necessarie. Basta usare if filter[idx]
è abbastanza.
if filter[indx] == True
Do 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 if
lettura sia corretta ( if included[indx]
).