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

时间:2013-11-26 20:00:34

标签: python performance algorithm list

我需要检查两个列表的一致性,例如,如果第一个列表不包含第二个列表中不存在的元素,并且类似元素的True是,则返回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

但是我需要在循环中完成它,所以我想知道,它会更快吗?

1 个答案:

答案 0 :(得分:3)

如果我正确理解了这个问题,也许你可以使用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很大,您可以看到这将如何导致大量操作被保存。