我们说我有两个列表list1
和list2
:
list1 = [ 3, 4, 7 ]
list2 = [ 5, 2, 3, 5, 3, 4, 4, 9 ]
我想查找list1
中存在的list2
元素的数量。
预期输出为4 ,因为list1
中的3和4在list2
中出现两次。因此,总计数为4.
答案 0 :(得分:6)
使用列表理解并检查元素是否存在
c = len([i for i in list2 if i in list1 ])
来自@Jon的更好的是
c = sum(el in list1 for el in list2)
输出:4
答案 1 :(得分:2)
您可以使用first
方法将给定数字的add
列表和sum
出现次数迭代为count
。
for number in list1:
s += list2.count(number);
答案 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 Jon)中有重复项,这并没有考虑到会发生什么,而且更优雅的版本是:
counter = Counter(list2)
occurrences = sum(counter[v] for v in set(list1))
答案 3 :(得分: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(..)
过滤掉列表中不满足的元素“在”条件下。例如:
>>> 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?。