Edited at

count変数のインクリメントとenumerateの速度比較

More than 3 years have passed since last update.

Pythonにおいて、シーケンスでfor文を回す際、カウンタが必要になることがあると思います。 :smiley:

その際、for文の外でカウンタを定義してfor文内でインクリメントするか、enumerateを使用してカウンタを取得するかが簡単な方法になるそうです :relaxed:

その話を聞いて、どちらの方が早く処理ができるのか、疑問に思いました :confused:

そこで、速度を計測してみることにしました :grin:

計測用コードはこちらになります。


sptst.py

import time

def count(test):
count=0
start=time.time()
for item in test:
a=count
b=item
c=test[count]
count+=1
diff=time.time()-start
return diff

def enumer(test):
start=time.time()
for count,item in enumerate(test):
a=count
b=item
c=test[count]
diff=time.time()-start
return diff

test=[]
for i in range(100000):
test.append("test")

loopNum=1000
summation=0
for i in range(loopNum):
summation+=(count(test))/(enumer(test))

print(summation/loopNum)


countをつかったfor文とenumerateを使ったfor文で、100000個の要素からなるリストを回して、適当な処理をさせてみました。 :neckbeard:

それぞれのfor文を1000回ずつ回し、countの方は平均何倍の時間になったか表示します。 :neckbeard:

その結果、だいたい1.2くらいに落ち着きました。 :anguished:

この場合は処理が軽かったので1.2倍もの差がでてしまった面はありそうです :no_mouth:

for文でカウンタが必要になった際は、変数を外で定義してインクリメントするよりも、enumerateを使用した方がよさそうですね :wink: