快速检查两个列表的一致性

2024-03-28 23:38:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要检查两个列表的一致性,例如,如果第一个列表不包含第二个列表中不存在的元素,并且相似元素的count相同,则返回{}。现在,我得出了以下结论:

def is_consistent(spec_a, spec_b):
    for a in spec_a:
        if spec_a.count(a) != spec_b.count(a):
            return False
    return True

但我需要一个循环来完成,所以我想知道,能不能更快?在


Tags: infalsetrue元素列表forreturnif
1条回答
网友
1楼 · 发布于 2024-03-28 23:38:10

如果我能正确理解这个问题,也许您可以使用Counter

from collections import Counter
def is_consistent(spec_a, spec_b):
    c1 = Counter(spec_a)
    c2 = Counter(spec_b)
    result = c1 - c2
    return all(result[key] == 0 for key in c1)

循环是不可避免的,它总是以某种形式存在。事实上,我这里有3个循环。(每个Counter中有一个,然后是最后最明显的一个)。但是,我的解决方案避免的操作是.count,这是另一个嵌套在内的隐式循环。在

嵌套循环通常是您希望消除的循环,因为如果外部循环迭代N次,而内部循环迭代N次,则总迭代次数为N*N次。比较一下我的解决方案,它只有~3*N个迭代(3个循环,每个循环大约有N个迭代)。如果N很大,您可以看到这将如何导致大量操作被保存。在

相关问题 更多 >