2016-11-29 106 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