如何基于python中另一个列表中的元素过滤列表

Kin*_*gle 3 python list filter

我有一个大约62,000个数字的列表A,另一个大约370,000个列表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)] 
Run Code Online (Sandbox Code Playgroud)

哪个可行,但是对于这么大的列表显然很慢,因为(我认为吗?)搜索会遍历整个B,即使已经在B中找到了该元素也是如此。因此脚本正在遍历370,000个元素的列表62,000次。

A和B中的元素是唯一的(B包含0到700,000之间的唯一值的列表,而A包含这些值的唯一子集),因此一旦在B中找到A [i],搜索就可以停止。值也按升序排列(如果有任何意义)。

有什么办法可以更快地做到这一点?

Pat*_*ugh 7

set(B)将为A中的每个项目创建一个新对象。而是使用内置的set.intersection

C = set(A).intersection(B)
Run Code Online (Sandbox Code Playgroud)