簡體   English   中英

從python中的元組列表中刪除重復項

[英]Removing duplicates from a list of tuples in python

我有一個元組列表,我想刪除重復的元組。 這樣的事情。

x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']]

我想要這樣的輸出:

y = [['aaron','jeng'],['sdf','wqd']]

我如何輕松地做到這一點? 我可以編寫代碼來做到這一點,但是對此有任何內置函數嗎?

編輯1:正如每個人都建議的那樣,很抱歉將它們稱為元組。 我的意思是列表清單。 謝謝。

您的x值不包含元組列表,而是列表列表。 如果確實包含元組列表:

x = [('aaron','jeng'),('sdf','wqd'),('aaron','jeng')]
out = set([i for i in x])
print(list(out))

[('aaron', 'jeng'), ('sdf', 'wqd')]

那是一個列表列表...但是,無論如何,您可以使用一個臨時集來確保沒有重復:

x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']]

seen = set()  # store here the visited tuples
y = [e for e in x if tuple(e) not in seen and not seen.add(tuple(e))]
# [['aaron', 'jeng'], ['sdf', 'wqd']]

如果將內部列表預先轉換為元組,則其性能會更好。

如果不需要保留順序,則只需將內部列表轉換為元組,然后將x轉換為set()

使用元組列表會很容易,您只需要set(x) 由於您的列表是列表列表,而不是元組列表,因此您可以先將它們轉換:

set(tuple(i) for i in x)

返回:

{('aaron', 'jeng'), ('sdf', 'wqd')}

或者,如果您想按原樣重新轉換為列表列表:

[list(t) for t in (set(tuple(i) for i in x))]
# [['aaron', 'jeng'], ['sdf', 'wqd']]

您沒有元組,列表中有列表。

x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']]

uniques = list (set ( tuple(a) for a in x))

是將生成器表達式輸入到集合中,然后又輸入到列表中,從而導致

[('aaron', 'jeng'), ('sdf', 'wqd')]

您可以使用enumerateany

x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']]
new_x = [[a, b] for i, [a, b] in enumerate(x) if not any(c == b for _, c in x[:i])]

輸出:

[['aaron', 'jeng'], ['sdf', 'wqd']]

轉換為字典該怎么辦,因為字典可以具有唯一的鍵:

x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']]

print({tuple(i):i for i in x}.values())

輸出:

[['aaron', 'jeng'], ['sdf', 'wqd']]

暫無
暫無

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

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