2017-09-26 80 views
0

我想统计两个列表(list1list2)在同一个索引中具有相同数量的次数。Python:Count元素明智等于元素的数量

首先,有这种做法:

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

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

是否有维护O(1)空间,我最初的解决方案中使用做这件事的Python的方式吗?

谢谢!

回答

3

首先,你应该明白,使用单线是与Pythonic不是同义词。也就是说,你可以使用生成器表达式来代替列表理解来使用恒定空间:

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

我实际上会使用上面的一行代码。这是非常可读的。然而,相当于for循环一样细

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

事实上,如果for循环的方法更高性能的我也不会感到惊讶。你失去了很多发电机的开销。