11
10

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-12-26

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:

11
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10