Python:查找另一个列表中一个列表的元素数

Tho*_*Lee 5 python

假设我有两个列表list1,list2如下:

list1 = [ 3, 4, 7 ]
list2 = [ 5, 2, 3, 5, 3, 4, 4, 9 ]
Run Code Online (Sandbox Code Playgroud)

我想找到list1其中存在的元素的数量list2.

预期输出为4,因为3和4 list1出现两次list2.因此,总计数为4.

Flo*_*oor 8

使用列表理解并检查元素是否存在

c =  len([i for i in list2 if i in list1 ])
Run Code Online (Sandbox Code Playgroud)

更好的一个来自@Jon ie

c = sum(el in list1 for el in list2)
Run Code Online (Sandbox Code Playgroud)

输出: 4

  • 为什么在这里建立一个列表...虽然因为列表而检查不是很有效,你也可以把它写成`sum(列表2中的el列表1中的el) (4认同)

Moi*_*dri 5

您可以使用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 
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您还可以使用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]
Run Code Online (Sandbox Code Playgroud)

有关 的更多详细信息__contains__,请阅读:做什么__contains__,什么可以调用__contains__函数?