如果元组包含某个元素,则从列表中删除元组

时间:2016-09-14 00:35:10

标签: python

我有一个元组列表(num,id):

l = [(1000, 1), (2000, 2), (5000, 3)]

每个元组的第二个元素包含标识符。假设我要删除ID为2的元组,我该怎么做?

即。我希望新列表为:l = [(1000,1), (5000, 3)]

我已尝试过l.remove(2),但无效。

6 个答案:

答案 0 :(得分:8)

您可以使用带有过滤器的列表推导来实现此目的。

l = [(1000, 1), (2000, 2), (5000, 3)]
m = [(val, key) for (val, key) in l if key != 2]

答案 1 :(得分:2)

那是因为值 2 不在列表中。相反,如下所示:形成元组中第二个元素的列表,然后删除该位置的元素。

del_pos = [x[1] for x in l].index(2)
l.pop(del_pos)

请注意,这只会删除第一个这样的元素。如果您的实例不是唯一的,那么请使用其他解决方案之一。我相信这更快,但只处理单一案例。

答案 2 :(得分:2)

或使用过滤器:

l = [(1000, 1), (2000, 2), (5000, 3)]
print(list(filter(lambda x: x[1] != 2, l)))

输出:

[(1000, 1), (5000, 3)]

答案 3 :(得分:0)

你可以这样做:

>>> l = [(1000, 1), (2000, 2), (5000, 3)]
>>> for i in list(l):
...     if i[1] == 2:
...         l.remove(i)

如果您只想删除第一次出现,请在break

下面添加remove

答案 4 :(得分:0)

简单列表理解:

[x for x in l if x[1] != 2]

答案 5 :(得分:0)

另一个可能的解决方案

r = [(1000, 1), (2000, 2), (5000, 3)]
t = [i for i in r if i.count(2) == 0]