问题描述:有一个包含大约321w个元素的List型变量A,一个包含200个元素的List型变量B。现在需要求出B中各元素在变量A中的索引,若B中的某个元素没有出现在A中,则不返回。这里主要对比当修改A变量的类型时查找花费的时间。
具体代码如下:
import pandas as pd
import numpy as np
A=vectorizer.get_feature_names() #List型 共321w个元素
np_A=np.array(A) #numpu型
pd_A=pd.DataFrame(np_A) #pands型
B=list(g.nodes()) #待查找元素 共244个 g不影响效率的对比
#List型查找时间
t0=time.time()
item_idx=[A.index(item) for item in item_list if item in A]
t1=time.time()
print("List型查找时间:{:.3f}".format(t1-t0))
#Numpy型查找时间
t0=time.time()
item_idx=np.where(np_A==np.array(B)[:,None])[-1]
t1=time.time()
print("Numpy型查找时间:{:.3f}".format(t1-t0))
#Pandas型查找时间
t0=time.time()
item_idx=pd_feats[pd_A[0].isin(B)].index
t1=time.time()
print("Numpy型查找时间:{:.3f}".format(t1-t0))
其实验结果如下:从目前的结果来看,DataFrame的查询效率会更高。
List型查找时间:33.385
Numpy型查找时间:5.672
DataFrame型查找时间:0.125



