Deleting list elements based on condition

你。 提交于 2019-11-26 17:28:37

问题


I have a list of lists: [word, good freq, bad freq, change_status]

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

I would like to delete from the list all elements which don't satisfy a condition.

So if change_status > 0.3 and bad_freq < 5 then I would like to delete that the elements corresponding to it.

So the list_1 would be modified as,

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

How do I selective do that?


回答1:


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]

You can also use if not (item[2] < 5 and item[3] < 0.3) for the condition if you want.




回答2:


Use the filter function with an appropriate function.

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

Demo:

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

Note that good doesn't satisfy your condition (20 < 5 is false) even though you said so in your question!


If you have many elements you might want to use the equivalent function from itertools:

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


来源:https://stackoverflow.com/questions/7623715/deleting-list-elements-based-on-condition

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!