Подтвердить что ты не робот

Удаление элементов списка на основе условия

У меня есть список списков: [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]]

Как это сделать?

4b9b3361

Ответ 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]

Вы также можете использовать if not (item[2] < 5 and item[3] < 0.3) для условия, если хотите.

Ответ 2

Используйте функцию 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]]

Обратите внимание, что добро не удовлетворяет вашему условию (20 < 5 является ложным), даже если вы сказали это в своем вопросе!


Если у вас есть много элементов, вы можете использовать эквивалентную функцию из itertools:

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