在两个列表中查找重叠对象的最快方法

ale*_*wis 2 python list unique match

我有自定义对象的两个列表traintest尺寸分别为9,904和7,223。每个列表中的元素都是唯一的。

我想找到两个列表中存在的元素。目前我正在使用以下方法,但速度非常慢:

overlap = [e for e in test if e in train]
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法来实现这一目标?

dal*_*nsi 5

为了完成@Jeff 的回答,我们可以比较两种方法的计算时间:

import numpy as np
import time

test = np.random.randint(1,50000,10000)
train = np.random.randint(1,50000,10000)

start_list = time.time()
overlap = [e for e in test if e in train]
end_list = time.time()
print("with list comprehension: " + str(end_list - start_list))

set_test = set(test)
set_train = set(train)

start_set = time.time()
overlap = set_test.intersection(set_train)
end_set = time.time()
print("with sets: " + str(end_set - start_set))
Run Code Online (Sandbox Code Playgroud)

我们得到输出:

with list comprehension: 0.08894968032836914
with sets: 0.0003533363342285156
Run Code Online (Sandbox Code Playgroud)

所以使用集合的方法大约快 300 倍。