根据条件删除列表元素
我有一个包含多个列表的列表,格式是:[单词, 好的频率, 不好的频率, 状态变化]
list_1 = [['good',100, 20, 0.2],['bad', 10, 0, 0.0],['change', 1, 2, 2]]
我想从这个列表中删除那些不满足特定条件的元素。
具体来说,如果状态变化 > 0.3 且 不好的频率 < 5
,那么我就想删除与这些条件对应的元素。
这样,列表1会被修改成:
list_1 = [['good',100, 20, 0.2],['bad', 10, 0, 0.0]]
我该怎么选择性地做到这一点呢?
2 个回答
23
使用 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
是假的),尽管你在问题中这么说了!
如果你有很多元素,可能想用 itertools 中的等效函数:
from itertools import ifilter
filtered = ifilter(lambda x: x[3] <= 0.3 and x[2] < 5, list_1)
83
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)
这个条件。