2017-09-26 45 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循環的方法更高性能的我也不會感到驚訝。你失去了很多發電機的開銷。