Python:从“元组列表”中生成“元组集”,但不考虑顺序

发布于 2021-01-29 17:25:21

如果我有如下的元组列表:

[('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]

我想删除重复的元组(就内容和内部项目的顺序而言是重复的),以便输出为:

[('a', 'b'), ('c', 'd')]

要么

[('b', 'a'), ('c', 'd')]

我试图将其转换为一组,然后向列表中,但输出将保持两者('b', 'a')('a', 'b')在结果集!

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    尝试这个 :

    a = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
    b = list(set([ tuple(sorted(t)) for t in a ]))
    [('a', 'b'), ('c', 'd')]
    

    让我们分解一下:

    如果对元组进行排序,它将成为已排序的列表。

    >>> t = ('b', 'a')
    >>> sorted(t)
    ['a', 'b']
    

    对于每个元组ta,排序并转换回一个元组。

    >>> b = [ tuple(sorted(t)) for t in a ]
    >>> b
    [('a', 'b'), ('c', 'd'), ('a', 'b'), ('a', 'b')]
    

    将结果列表转换b为set:值现在是唯一的。将其转换回列表。

    >>> list(set(b))
    [('a', 'b'), ('c', 'd')]
    

    等等!

    请注意,您可以b通过使用生成器而不是列表理解来跳过中间列表的创建。

    >>> list(set(tuple(sorted(t)) for t in a))
    [('a', 'b'), ('c', 'd')]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看