2017-10-21 145 views

回答

2

使用列表理解,並檢查是否元素存在

c = len([i for i in list2 if i in list1 ]) 

更好地從一個@喬恩即

c = sum(el in list1 for el in list2) 

輸出:4

+2

爲什麼要建立一個列表在這裏...雖然由於列表檢查效果不好,你也可以把它寫成'sum(列表1中el的列表中的el)' –

2

可以遍歷first列表和add發生給定數字到sum使用count方法。

for number in list1: 
    s += list2.count(number); 
0

您可以使用sum(...)與發電機表達來實現這一目標:

>>> list1 = [ 3, 4, 7 ] 
>>> list2 = [ 5, 2, 3, 5, 3, 4, 4, 9 ] 

#   v returns `True`/`False` and Python considers Boolean value as `0`/`1` 
>>> sum(x in list1 for x in list2) 
4 

作爲替代方案,你也可以使用Python的__contains__的神奇功能檢查列表中是否存在元素使用filter(..)過濾掉列表中不滿足「in」條件的元素。例如:

>>> len(list(filter(list1.__contains__, list2))) 
4 

# Here "filter(list(list1.__contains__, list2))" will return the 
# list as: [3, 3, 4, 4] 

__contains__有關詳細信息,請閱讀:What does __contains__ do, what can call __contains__ function?

+0

沒有想到使用dunder方法並不是很好的做法 - 這會只適用於Python 2 –

1

你可以在這裏使用collections.Counter,所以這是一個天真而相當醜陋的實現(我的)。

list1 = [ 3, 4, 7 ] 
list2 = [ 5, 2, 3, 5, 3, 4, 4, 9 ] 
from collections import Counter 
total = 0 
c = Counter(list2) 
for i in list1: 
    if c[i]: 
    total += c[i] 

這並沒有考慮到,如果你有在第一列表(HT喬恩)重複,和更優雅的版本,這一切都發生了什麼:

counter = Counter(list2) 
occurrences = sum(counter[v] for v in set(list1)) 
相關問題