J'ai une liste de valeurs que je dois filtrer étant donné les valeurs dans une liste de booléens:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Je génère une nouvelle liste filtrée avec la ligne suivante:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
ce qui se traduit par:
print filtered_list
[1,4]
La ligne fonctionne mais me semble un peu exagérée et je me demandais s'il y avait un moyen plus simple d'y parvenir.
Des conseils
Résumé de deux bons conseils donnés dans les réponses ci-dessous:
1- Ne nommez pas une liste filter
comme je l'ai fait car c'est une fonction intégrée.
2- Ne comparez pas les choses à ce True
que j'ai fait if filter[idx]==True..
car c'est inutile. Il suffit d'utiliser if filter[idx]
.
if filter[indx] == True
ne pas utiliser ==
si vous souhaitez vérifier l'identité avec True
, utilisez is
. Quoi qu'il en soit, dans ce cas, toute la comparaison est inutile, vous pouvez simplement utiliser if filter[indx]
. Enfin: n'utilisez jamais le nom d'un élément intégré comme nom de variable / module (je fais référence au nom filter
). En utilisant quelque chose comme included
, pour que le if
lit bien ( if included[indx]
).