Pythonのリスト内包表記と単純ループ

最近、Pythonでの開発をしていてテクニックのようなことを勉強したいと思い

エキスパートPythonプログラミング

エキスパートPythonプログラミング

を読んでいます。

この本の中で、リスト内包表記の話がありました。

どうやら

for i in range(100):
    a.append(i)

のような単純ループよりも

a = [i for i in range(100)]

のようなリスト内包表記の方が速いらしいです。

検証

本当に速いのか、確かめてみました。

単純ループ

import time
start = time.time()
a = []
for i in range(100):
    a.append(i)
print time.time() - start,
print " [sec]"

のコードと

リスト内包表記

import time
start = time.time()
a = []
a = [i for i in range(100)]
print time.time() - start,
print " [sec]"

のコード、どちらが速いのか。 range()の中の数字を少しずつ増やして調べてみました。

結果は以下の図になりました。横軸がループ回数で、縦軸が処理時間[秒]です。 f:id:carumisu:20151005205220p:plain

リスト内包表記の方が少し速いですね。

少しずつ書くようにしてみようと思います。