Python:计算元素明确等元素的数量

时间:2017-09-26 15:55:32

标签: python

我想计算两个列表(list1list2)在同一索引中具有相同数字的次数。

首先,有这种方法:

def count_common(list1, list2):
    count = 0
    for i, elem1 in enumerate(list1):
        if elem1 == list2[i]:
            count += 1
    return count

这是O(n)时间和O(1)空间。

如果我尝试更多的Pythonic方式,我会获得O(n)空间:

def count_common(list1, list2):
    return sum([1 for (elem1, elem2) in zip(list1, list2) if elem1 == elem2])

是否有一种Pythonic方法可以维持我初始解决方案中使用的O(1)空间?

谢谢!

1 个答案:

答案 0 :(得分:3)

首先,你应该真正理解使用单行是不是Pythonic 的同义词。话虽这么说,您可以使用生成器表达式而不是列表推导来使用常量空间:

sum(a == b for a, b in zip(list1, list2))

我实际上会使用上面的单行。它非常易读。但是,循环的等价物就像

一样好
total = 0
for a, b in zip(list1, list2):
    total += a == b

事实上,如果for循环方法更具性能,我不会感到惊讶。你因发电机开销而损失惨重。