我有一个大约62000个数字的列表a,还有一个大约370000个数字的列表B。我想过滤B,使其只包含A中的元素。我尝试了以下方法:
A=[0,3,5,73,88,43,2,1]
B=[0,5,10,42,43,56,83,88,892,1089,3165]
C=[item for item in A if item in set(B)]
这是可行的,但显然是非常缓慢的如此大的名单,因为(我认为?)搜索将继续在整个B中进行,即使元素已经在B中找到了。因此脚本将遍历370000个元素的列表62000次。你知道吗
A和B中的元素是唯一的(B包含0到700000之间的唯一值列表,A包含这些值的唯一子集),因此一旦在B中找到A[i],搜索就可以停止。如果这意味着什么的话,这些值也是按升序排列的。你知道吗
有什么方法可以更快地做到这一点吗?你知道吗
为了确保我所做的是最快的,我会这么做:
如果您不想丢失
B
列表,那么只需使用B
而不是B_filter
并且不声明B_filter
,这样您就不必复制370k的大列表。你知道吗这是为a中的每个项创建一个新的
set(B)
。相反,请使用内置的set.intersection
:相关问题 更多 >
编程相关推荐