Ave*_*nus -1 python list python-3.x
我有一个约3000项的清单.我们称之为listA.另有一份包含1,000,000件物品的清单.我们称之为listB.
我想查看listA属于多少项listB.例如,得到一个像这样的答案436.
显而易见的方法是使用嵌套循环查找每个项目,但这很慢,特别是由于列表的大小.
什么是最快和/或Pythonic方式来获取一个列表的项目的数量属于另一个?
制作一套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)
还应该注意,这些基于集合的操作仅在列表中的项目可以清洗时才起作用(例如,不是列表本身)!
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |