2016-11-29 162 views
0

如何刪除元組列表中第二個元素重複出現的元組列表中的所有事件?從元組列表中刪除所有出現的元素

我:

a = [('a',1),('b',3),('c',1),('d',1),('e',5),('f',1)] 

我試圖返回

[('b',3),('e',5)] 

我試圖

a = list(set(a)) 

但不會刪除所有事件,是有辦法做到這一點無需導入任何庫?

+3

你有,你已經嘗試過的任何代碼?這個網站是更多的代碼錯誤的幫助,而不是編寫代碼 –

+0

剛剛編輯帖子 – Neil

+0

我不確定你的意思是「所有第二個元素的出現」。你的例子列表中的第二個元素是'('b',3)'。 –

回答

1

嘗試以下操作:

a = [('a',1),('b',3),('c',1),('d',1),('e',5),('f',1)] 

reduced = [y for x in a for y in x] 

[x for x in a if reduced.count(x[0]) == 1 and reduced.count(x[1]) == 1] 

# [('b', 3), ('e', 5)] 

這拉平原來的元組列表到一個列表。然後它遍歷原始列表,併爲每個元組檢查其元素是否僅位於展平列表中一次。如果是這樣,它保持它;否則,它會丟棄它。

您也可以使用Python字典對於這一點(如果內的元組的第一要素是彼此不同):

list({k:v for k,v in dict(a).items() if list(dict(a).values()).count(v)==1}.items()) 

這裏的想法是你的元組的列表轉換成一個字典,並保持key-valuecountvalue部分字典的values是1.

我希望這有助於。

0

嗯,怎麼樣:

def UniqueTuples(tuples): 
    seen, unique = set(), list() 
    for x, y in tuples: 
     if y not in seen: 
      seen.add(y) 
      unique.append((x, y)) 
    return unique