Tengo una lista de valores que necesito filtrar dados los valores en una lista de booleanos:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Genero una nueva lista filtrada con la siguiente línea:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
lo que resulta en:
print filtered_list
[1,4]
La línea funciona pero parece (para mí) un poco exagerada y me preguntaba si había una manera más simple de lograr lo mismo.
Consejos
Resumen de dos buenos consejos dados en las respuestas a continuación:
1- No nombre una lista filter
como lo hice porque es una función incorporada.
2- No compares cosas con las True
que hice, if filter[idx]==True..
ya que es innecesario. Solo usar if filter[idx]
es suficiente.
if filter[indx] == True
¿Los que no usan ==
si desea comprobar la identidad con True
, el uso is
. De todos modos, en este caso, toda la comparación es inútil, simplemente podría usarla if filter[indx]
. Por último: nunca use el nombre de un incorporado como nombre de variable / módulo (me refiero al nombre filter
). Usando algo como included
, para que se if
lea bien ( if included[indx]
).