我需要检查两个列表的一致性,例如,如果第一个列表不包含第二个列表中不存在的元素,并且类似元素的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
但是我需要在循环中完成它,所以我想知道,它会更快吗?
答案 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
很大,您可以看到这将如何导致大量操作被保存。