簡體   English   中英

如果元組包含給定索引的某個元素,則從列表中刪除元組

[英]Remove a tuple from a list if the tuple contains a certain element by given index

我有一個元組列表(num,id):

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

每個元組的第二個元素包含標識符。 假設我想刪除 id 為2的元組,我該怎么做?

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

我試過l.remove(2)但它不起作用。

您可以使用帶有過濾器的列表理解來實現此目的。

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

那是因為值2不在列表中。 相反,類似於以下內容:形成元組中第二個元素的列表,然后刪除該位置的元素。

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

請注意,這只會刪除第一個這樣的元素。 如果您的實例不是唯一的,請使用其他解決方案之一。 我相信這會更快,但只能處理單一外觀的情況。

或使用過濾器:

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

輸出:

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

你可以這樣做:

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

如果您只想刪除第一次出現,請在remove行下方添加break

簡單的列表理解:

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

另一種可能的解決方案

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM