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?
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.
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)