Pythonにおいて、シーケンスでfor文を回す際、カウンタが必要になることがあると思います。
その際、for文の外でカウンタを定義してfor文内でインクリメントするか、enumerateを使用してカウンタを取得するかが簡単な方法になるそうです
その話を聞いて、どちらの方が早く処理ができるのか、疑問に思いました
そこで、速度を計測してみることにしました
計測用コードはこちらになります。
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個の要素からなるリストを回して、適当な処理をさせてみました。
それぞれのfor文を1000回ずつ回し、countの方は平均何倍の時間になったか表示します。
その結果、だいたい1.2くらいに落ち着きました。
この場合は処理が軽かったので1.2倍もの差がでてしまった面はありそうです
for文でカウンタが必要になった際は、変数を外で定義してインクリメントするよりも、enumerateを使用した方がよさそうですね