爱上python系列------python性能(四):list-set-dict性能对比

无意间看到文章说set的速度比list快,很是不解,于是自己做了一下实验

实验1:几乎不带重复的数据时三者查询性能的对比

import time
import numpy as np
##准备数据
mylist=[int(np.random.rand()*10000000) for i in range(10000000)]
myset=set(mylist)
mydic={i:i for i in mylist}
##list
st=time.time()
for i in mylist:
    t1=i
print(time.time()-st)
#set
st=time.time()
for j in myset:
    t2=j    
print(time.time()-st)
#dict
st=time.time()
for m in mydic:
    t3=mydic[m]
    #print(t3)
print(time.time()-st)

运行结果:

1.7017035484313965 
1.8434038162231445 
2.733205556869507

我们可以看到,在数据几乎不带重复数值的时候,dict实际上是最慢的

实验2:增加数据重复时三者查询性能的对比

import time
import numpy as np
##准备数据
##np.random.rand()这里比实验1少一个0,以增加重复数据比例,下面的实验同理
mylist=[int(np.random.rand()*1000000) for i in range(10000000)]

myset=set(mylist)
mydic={i:i for i in mylist}
##list
st=time.time()
for i in mylist:
    t1=i
print(time.time()-st)
#set
st=time.time()
for j in myset:
    t2=j    
print(time.time()-st)
#dict
st=time.time()
for m in mydic:
    t3=mydic[m]
    #print(t3)
print(time.time()-st)
    

运行结果:

1.7004029750823975
0.2652003765106201
0.5343024730682373

我们可以看到,现在是list最慢,set最快,插件还是比较大

之所以出现这一段情况是,set会进行去除,而且set对list操作后会进行排序哦,不信可以试试

dict 快是因为底层有hash,这个实验说明重复数值多,list会很慢

实验3:继续加大重复比例数据时三者查询性能的对比

import time
import numpy as np
##准备数据
mylist=[int(np.random.rand()*100000) for i in range(10000000)]
myset=set(mylist)
mydic={i:i for i in mylist}
##list
st=time.time()
for i in mylist:
    t1=i
print(time.time()-st)
#set
st=time.time()
for j in myset:
    t2=j    
print(time.time()-st)
#dict
st=time.time()
for m in mydic:
    t3=mydic[m]
    #print(t3)
print(time.time()-st)
    

运行结果:

1.7057056427001953
0.031199932098388672
0.04680013656616211

现在的数据就更加明显,毕竟set去重后,set里面的数据会很少,hash在这个实验也体现出来了意义,dict和list数据个数一样,但是dict可快了

前面提到了set进行排序的作用,排序确实可以在一定程度上增加数据查询速度

import time
import numpy as np
ls1=[i for i in range(10000000)]
ls2=[int(np.random.rand()*10000000) for i in range(10000000)]
st=time.time()
for i in ls1:
    t1=i
print(time.time()-st)
st=time.time()
for j in ls2:
    t2=j
print(time.time()-st)

运行结果:

1.591202974319458 
2.0755040645599365

有序的数据是可以在查询的时候变得更快的,只是幅度多少是待定,这个实验结果提供比较大

猜你喜欢

转载自blog.csdn.net/zhou_438/article/details/109231927