PYTHON - 如果包含在另一个列表中,则从列表中删除元组

时间:2017-03-27 15:03:59

标签: python list list-comprehension

我有一个元组列表:

list_of_tuples = [('4', 35.26), ('1', 48.19), ('5', 90.0), ('3', 90.0)]

元组[0]是item_ID

元组[1]是一个角度

我有一个要从列表中删除/忽略的item_ID列表:

ignore_IDs = [5, 3]

我需要在list_of_tuples中找到最小的角度,只要它的ID不在ignore_IDs中。

这用于角度改变的函数和要忽略的ID改变。

任何人都可以帮助我吗?

道歉如果解释得很糟糕。

3 个答案:

答案 0 :(得分:1)

如果我没有被误解,

像这样的事情会发生:

min([t[1] for t in list_of_tuples if int(t[0]) not in ignore_IDs])

答案 1 :(得分:0)

您可以将filter与lambda一起使用来实现此目的:

>>> list(filter(lambda x: x[0] not in map(str, ignore_IDs), list_of_tuples))
[('4', 35.26), ('1', 48.19)]

注意:使用了map(str, ignore_IDs)行,因为您的元组ID与要忽略的ID之间存在冲突类型。

一个建议:如果你想要忽略很多ID,我建议你使用一个哈希对象,比如字典或集合。对于列表,可清除对象的成员资格查找为O(1)而不是O(n)

答案 2 :(得分:0)

min函数支持一个键。您可以在键中使用lambda函数来获得所需的答案。

见这个例子

min(list_of_tuples, key = lambda (i,x): x if int(i) not in ignore_IDs else '')[1]

这将导致项目ID的最小角度不在忽略ID

35.26