67 votes

Suppression d'éléments de liste en fonction de la condition

J'ai une liste de listes : [word, good freq, bad freq, change_status]

 list_1 = [['good',100, 20, 0.2],['bad', 10, 0, 0.0],['change', 1, 2, 2]]

Je souhaite supprimer de la liste tous les éléments qui ne satisfont pas à une condition.

Donc si change_status > 0.3 and bad_freq < 5 alors je voudrais supprimer que les éléments qui lui correspondent.

Donc la liste_1 serait modifiée comme,

 list_1 = [['good',100, 20, 0.2],['bad', 10, 0, 0.0]]

Comment puis-je faire cela de manière sélective ?

83voto

agf Points 45052
list_1 = [['good',100, 20, 0.2],['bad', 10, 0, 0.0],['change', 1, 2, 2]]
list_1 = [item for item in list_1 if item[2] >= 5 or item[3] >= 0.3]

Vous pouvez également utiliser if not (item[2] < 5 and item[3] < 0.3) pour la condition si vous le souhaitez.

23voto

ThiefMaster Points 135805

Utilisez la fonction filter avec une fonction appropriée.

 list_1 = filter(lambda x: x[3] <= 0.3 and x[2] < 5, list_1)

Démo :

 In [1]: list_1 = [['good',100, 20, 0.2],['bad', 10, 0, 0.0],['change', 1, 2, 2]]
In [2]: filter(lambda x: x[3] <= 0.3 and x[2] < 5, list_1)
Out[2]: [['bad', 10, 0, 0.0]]

Notez que bien ne satisfait pas votre condition ( 20 < 5 est faux) même si vous l'avez dit dans votre question !


Si vous avez de nombreux éléments, vous pouvez utiliser la fonction équivalente d'itertools :

 from itertools import ifilter
filtered = ifilter(lambda x: x[3] <= 0.3 and x[2] < 5, list_1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X