web-dev-qa-db-fra.com

Suppression d'éléments de liste en fonction d'une 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 voudrais supprimer de la liste tous les éléments qui ne remplissent pas une condition.

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

Ainsi, la liste_1 serait modifiée comme,

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

Comment puis-je faire cela sélectivement?

30
Zenvega
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.

38
agf

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 bon 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)
11
ThiefMaster