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?

``````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 >= 5 or item >= 0.3]
``````

You can also use `if not (item < 5 and item < 0.3)` for the condition if you want.

Use the `filter` function with an appropriate function.

``````list_1 = filter(lambda x: x <= 0.3 and x < 5, list_1)
``````

Demo:

``````In : list_1 = [['good',100, 20, 0.2],['bad', 10, 0, 0.0],['change', 1, 2, 2]]
In : filter(lambda x: x <= 0.3 and x < 5, list_1)
Out: [['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 <= 0.3 and x < 5, list_1)
``````