【问题标题】:Find duplicate sets in list of sets在集合列表中查找重复集合
【发布时间】:2020-10-30 17:14:14
【问题描述】:

我有一组集合,我想检查两个或更多集合是否相同。 我不需要按精确的顺序查看这些集合。

示例列表

list = [
    {7, 12, 16, 17, 31},
    {33, 4, 8, 10, 46},
    {6, 40, 43, 22, 29},
    {2, 35, 9, 41, 31},
    {34, 38, 42, 43, 45},
    {38, 16, 20, 25, 30},
    {2, 10, 45, 19, 25},
    {4, 44, 41, 14, 16},
    {39, 40, 16, 25, 28},
    {34, 37, 45, 19, 23},
    {4, 41, 44, 14, 16},
]

在列表中有两个相同的集合,但编号顺序不同。 如何检查这些?

【问题讨论】:

    标签: python list set


    【解决方案1】:

    您可以使用frozensetCounter,例如,像这样:

    from collections import Counter
    
    lst = [{7, 12, 16, 17, 31}, {33, 4, 8, 10, 46}, {6, 40, 43, 22, 29}, {2, 35, 9, 41, 31}, {34, 38, 42, 43, 45},
            {38, 16, 20, 25, 30}, {2, 10, 45, 19, 25}, {4, 44, 41, 14, 16}, {39, 40, 16, 25, 28}, {34, 37, 45, 19, 23},
            {4, 41, 44, 14, 16}]
    
    counts = Counter(frozenset(s) for s in lst)
    
    print([e for e, c in counts.items() if c > 1])
    

    输出

    [frozenset({16, 4, 41, 44, 14})]
    

    附带说明,避免使用列表作为名称,它会影响内置的list

    【讨论】:

    • 呵呵,同样的想法 :)
    • 看来:)。
    • 不知道frozenset,它工作得很好。谢谢!
    【解决方案2】:

    顺序不同也没关系。您可以直接比较这些集合。

    >>> a=[{1,2,3},{2,3,1},{4,1,3}]
    >>> a[0]==a[1]
    True
    

    (我想将此作为评论,但由于声誉低,我不能。)

    编辑:其他答案更准确,但我只是想证明这个概念

    【讨论】:

    • 你怎么知道哪个出现了多次? :)
    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    相关资源
    最近更新 更多