[英]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')]
您可以使用enumerate
和any
:
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.