Python
速度
for文

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: