Python:如何获取一个属于另一个列表的项目数

Ave*_*nus -1 python list python-3.x

我有一个约3000项的清单.我们称之为listA.另有一份包含1,000,000件物品的清单.我们称之为listB.

我想查看listA属于多少项listB.例如,得到一个像这样的答案436.

显而易见的方法是使用嵌套循环查找每个项目,但这很慢,特别是由于列表的大小.

什么是最快和/或Pythonic方式来获取一个列表的项目的数量属于另一个?

sch*_*ggl 7

制作一套list_b.这将避免嵌套循环并进行包含检查O(1).整个过程O(M+N)应该是相当优化的:

set_b = set(list_b)
count = sum(1 for a in list_a if a in set_b)
# OR shorter, but maybe less intuitive
count = sum(a in set_b for a in list_a)  
# where the bool expression is coerced to int {0; 1} for the summing
Run Code Online (Sandbox Code Playgroud)

如果您不想(或必须)计算重复元素list_a,可以使用set intersection:

count = len(set(list_a) & set(list_b))
# OR
count = len(set(list_a).intersection(list_b))  # avoids one conversion
Run Code Online (Sandbox Code Playgroud)

还应该注意,这些基于集合的操作仅在列表中的项目可以清洗时才起作用(例如,不是列表本身)!