从元组列表中删除所有出现的元素

时间:2016-11-29 02:01:29

标签: python list loops dictionary tuples

如何删除重复元组中第二个元素的元组列表中的所有实例?

我有:

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

我想回来

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

我试过

a = list(set(a))

但是并没有删除所有事件,有没有办法在不导入任何库的情况下执行此操作?

2 个答案:

答案 0 :(得分: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-value对保留在字典countvalue部分的values为1的位置

我希望这会有所帮助。

答案 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