Eu tenho uma lista de valores que eu preciso filtrar dados os valores em uma lista de booleanos:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Eu gero uma nova lista filtrada com a seguinte linha:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
o que resulta em:
print filtered_list
[1,4]
A linha funciona, mas parece (para mim) um pouco exagerada e eu queria saber se havia uma maneira mais simples de conseguir o mesmo.
Conselhos
Resumo de dois bons conselhos dados nas respostas abaixo:
1- Não nomeie uma lista filtercomo eu fiz, porque é uma função interna.
2- Não compare as coisas Truecomo eu fiz, if filter[idx]==True..pois é desnecessário. Basta usar if filter[idx]é suficiente.
if filter[indx] == TrueVocê não usar ==se você quiser verificar se há identidade com True, uso is. De qualquer forma, neste caso, toda a comparação é inútil, você pode simplesmente usar if filter[indx]. Por fim: nunca use o nome de um built-in como um nome de variável / módulo (estou me referindo ao nome filter). Usando algo como included, para que ifleia bem ( if included[indx]).