web-dev-qa-db-ja.com

条件に基づいてリスト要素を削除する

リストのリストがあります:[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]]

どのように選択するのですか?

30
Zenvega
_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)を使用することもできます。

38
agf

適切な関数で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)
11
ThiefMaster