pythonシリーズに恋をする-pythonパフォーマンス(4):list-set-dictパフォーマンスの比較

設定速度がリストより速いという記事を偶然見たので戸惑い、自分で実験しました

実験1:重複データがほとんどない3つのクエリパフォーマンスの比較

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:データの重複を増やした場合の3つのクエリパフォーマンスの比較

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

リストが最も遅く、セットが最も速く、プラグインがまだ比較的大きいことがわかります

この状況の理由は、セットが削除され、操作後にセットがリストを並べ替えるためです。信じられない場合は、試してみてください。

最下層にハッシュがあるため、dictは高速です。この実験では、繰り返される値が多数あり、リストが非常に遅くなることが示されています。

実験3:繰り返し比率データを増やし続けた場合の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

現在のデータはより明白です。結局のところ、セットが重複排除された後、セット内のデータは非常に小さくなります。ハッシュもこの実験でその重要性を示しています。dictとlistデータの数は同じですが、dictの方が高速です。

前述のように、セットの並べ替え、並べ替えの役割により、データクエリの速度をある程度向上させることができます。

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