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 filtercomo lo hice porque es una función incorporada.
2- No compares cosas con las Trueque 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 iflea bien ( if included[indx]).