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 filtercomme je l'ai fait car c'est une fonction intégrée.
2- Ne comparez pas les choses à ce Trueque j'ai fait if filter[idx]==True..car c'est inutile. Il suffit d'utiliser if filter[idx].
if filter[indx] == Truene 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 iflit bien ( if included[indx]).