比方說,我有兩個列表list1
和list2
爲:的Python:找到一個列表元素的數量在另一個列表
list1 = [ 3, 4, 7 ]
list2 = [ 5, 2, 3, 5, 3, 4, 4, 9 ]
我想找到它存在於list2
的list1
的元素的個數。
預計產量爲4,因爲list1
中的3和4在list2
中出現兩次。因此,總數是4
比方說,我有兩個列表list1
和list2
爲:的Python:找到一個列表元素的數量在另一個列表
list1 = [ 3, 4, 7 ]
list2 = [ 5, 2, 3, 5, 3, 4, 4, 9 ]
我想找到它存在於list2
的list1
的元素的個數。
預計產量爲4,因爲list1
中的3和4在list2
中出現兩次。因此,總數是4
使用列表理解,並檢查是否元素存在
c = len([i for i in list2 if i in list1 ])
更好地從一個@喬恩即
c = sum(el in list1 for el in list2)
輸出:4
可以遍歷first
列表和add
發生給定數字到sum
使用count
方法。
for number in list1:
s += list2.count(number);
您可以使用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?。
沒有想到使用dunder方法並不是很好的做法 - 這會只適用於Python 2 –
你可以在這裏使用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))
爲什麼要建立一個列表在這裏...雖然由於列表檢查效果不好,你也可以把它寫成'sum(列表1中el的列表中的el)' –