なぜ「列挙」は「xrange + lst [i]」よりも遅いのですか?なぜPythonの列挙は遅いのですか?
>>> from timeit import Timer
>>> lst = [1,2,3,0,1,2]*1000
>>> setup = 'from __main__ import lst'
>>> s1 = """
for i in range(len(lst)):
elem = lst[i]
"""
>>> s2 = """
for i in xrange(len(lst)):
elem = lst[i]
"""
>>> s3 = """
for i, v in enumerate(lst):
elem = v
"""
>>> t1 = Timer(s1, setup); t2 = Timer(s2, setup); t3 = Timer(s3, setup)
>>> t1.timeit(3000), t2.timeit(3000), t3.timeit(3000)
(1.9263118636586494, 1.6119261665937992, 1.9606022553145719)
>>> t1.timeit(3000), t2.timeit(3000), t3.timeit(3000)
(1.93520258859715, 1.6145745478824836, 1.9529405971988041)
EDIT:あなたはenumerate
を
for i in xrange(len(lst)):
elem = i, lst[i]
Johnの答えが理にかなっている理由が明確でない場合は、enumerateによって生成された結果に、検索されたリスト要素が既に含まれています。 for-loopの変数でその名前を使用することで、それを明確にします。元のバージョンでは、検索を2回実行しました。 – SingleNegationElimination
@TokenMacGuyと2つのコメントシッター: "すでに検索されたリスト要素が含まれています...あなたは2回の検索を実行しました":これは正しくありません。要素はリストから一度だけ抽出されます。 2つのバージョン間の違いは、「ルックアップ」を伴わないフォーム「x = y」の冗長な割り当てである。 –