根据条件删除列表元素

时间:2011-10-01 23:54:07

标签: python list elements

我有一个列表清单:[word, good freq, bad freq, change_status]

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

我想从列表中删除所有不满足条件的元素。

所以如果change_status > 0.3 and bad_freq < 5那么我想删除与之对应的元素。

因此list_1将被修改为,

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

我如何选择性地做到这一点?

2 个答案:

答案 0 :(得分:37)

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]

如果需要,您还可以使用if not (item[2] < 5 and item[3] < 0.3)作为条件。

答案 1 :(得分:12)

使用具有适当功能的filter功能。

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

演示:

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]]

请注意 good 不符合您的条件(20 < 5为false),即使您在问题中这么说了!


如果您有许多元素,可能需要使用itertools中的等效函数:

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