ale*_*wis 2 python list unique match
我有自定义对象的两个列表train和test尺寸分别为9,904和7,223。每个列表中的元素都是唯一的。
我想找到两个列表中都存在的元素。目前我正在使用以下方法,但速度非常慢:
overlap = [e for e in test if e in train]
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法来实现这一目标?
为了完成@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 倍。
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |