赞
踩
有一个包含大约321w个元素的List型变量A,一个包含200个元素的List型变量B。现在需要找出B中各元素在A中对应的索引,若B中的某个元素没有出现在A中,则不返回。那么怎么才能高效地从A中查找到B中的元素呢?
想要提高查找速度最简单的方法就是用“空间换时间”。即,修改A\B两个元素的数据类型,利用其他数据类型的优势来提高查找速率。
关于下述代码,有以下几点需要事先说明:
具体代码如下:
import pandas as pd import numpy as np import random import time A=list(range(3000000)) #生成长度为300w的list型元素A B=A[:300] random.shuffle(A) #将A中的元素顺序打乱 #List型查找时间 t0=time.time() idx_list=[A.index(item) for item in B if item in A] t1=time.time() print("List型查找时间:{:.3f}".format(t1-t0)) #Numpy型查找时间 np_A=np.array(A) np_B=np.array(B) t0=time.time() idx_np=np.where(np_A==np_B[:,None])[-1] t1=time.time() print("Numpy型查找时间:{:.3f}".format(t1-t0)) #Pandas型查找时间 pd_A=pd.DataFrame(A) t0=time.time() idx_dt=pd_A[pd_A[0].isin(B)].index #但要注意使用该方法得到的索引顺序是从小到大的,其索引值的顺序与B中元素的顺序并不一致。如果让表达式中的.index去掉,就可以得到每个值及其索引值了。 t1=time.time() print("DataFrame型查找时间:{:.3f}".format(t1-t0))
其实验结果如下:从目前的结果来看,DataFrame的查询效率会更高。
List型查找时间:33.431
Numpy型查找时间:2.027
DataFrame型查找时间:0.058
总结:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。