我有一个元组列表(num,id):
l = [(1000, 1), (2000, 2), (5000, 3)]
每个元组的第二个元素包含标识符。假设我要删除ID为2
的元组,我该怎么做?
即。我希望新列表为:l = [(1000,1), (5000, 3)]
我已尝试过l.remove(2)
,但无效。
答案 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]