Python:按元素计算相等元素的数量

Python:按元素计算相等元素的数量,python,Python,我想计算两个列表(list1和list2)在同一索引中具有相同编号的次数 首先,有一种方法: 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)空间 如果我尝试更具python风格的方式,我会得到O(n)空间: 有

我想计算两个列表(
list1
list2
)在同一索引中具有相同编号的次数

首先,有一种方法:

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)空间

如果我尝试更具python风格的方式,我会得到O(n)空间:

有没有一种Pythonic的方法来维护我的初始解决方案中使用的O(1)空间


谢谢

首先,您应该真正理解使用一行程序并不是Pythonic的同义词。也就是说,可以使用生成器表达式而不是列表表达式来使用常量空间:

sum(a == b for a, b in zip(list1, list2))
我实际上会使用上面的一个班轮。它可读性很强。但是,等效的for loop同样适用:


事实上,如果for-loop方法的性能更好,我也不会感到惊讶。生成器开销会给您带来很大损失。

首先,您应该真正了解使用一行程序并不是Pythonic的同义词。也就是说,可以使用生成器表达式而不是列表表达式来使用常量空间:

sum(a == b for a, b in zip(list1, list2))
我实际上会使用上面的一个班轮。它可读性很强。但是,等效的for loop同样适用:

事实上,如果for-loop方法的性能更好,我也不会感到惊讶。你会因为发电机的开销而损失很多

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