簡體   English   中英

使用枚舉的循環或使用Python中的xrange循環的速度更快?

[英]What is faster for loop using enumerate or for loop using xrange in Python?

什么是更快,使用枚舉或使用xrange的for循環?

編輯:我已經測試過,我只看到最小的差異。

枚舉稍快一些。 在Python 3中測試:

>>>import pygame
>>>pygame.init()
>>>clock = pygame.time.Clock()
>>>a = list(range(100000))
>>>def do_with_range():
...    clock.tick()
...    k = 0
...    for i in range(len(a)):
...        k += a[i]
...    print(clock.tick())
>>>def do_with_enumerate():
...    clock.tick()
...    k = 0
...    for i, j in enumerate(a):
...        k += j
...    print(clock.tick())
>>>do_with_range()
23
>>>do_with_enumerate()
21

如果a不是列表,而是生成器,則使用枚舉(使用范圍為74ms,使用枚舉為23ms)會明顯更快。

您可以使用標准庫中的timeit模塊來比較兩者。 下面使用的timeit.timeit()函數聲明它運行1'000'000次並返回以秒為單位的總時間。 在這個測試中,enumerate()稍慢。

>>> import timeit
>>> timeit.timeit('for i in xrange(100): a[i]', 'a = list(xrange(100))')
7.2920000553131104
>>> timeit.timeit('for i, o in enumerate(a): o', 'a = list(xrange(100))')
10.359999895095825
>>> timeit.timeit('for i in xrange(100): a[i] + 1', 'a = list(xrange(100))')
10.380000114440918
>>> timeit.timeit('for i, o in enumerate(a): o + 1', 'a = list(xrange(100))')
13.514999866485596

For循環可以同時使用enumerate和xrange,雖然它會很愚蠢。 枚舉函數添加一個索引,以便您可以告訴迭代中項目的索引是什么。 xrange函數返回一個可迭代的數字。 當您想要執行某些次數而不是迭代中的每個元素時,請使用它。

例子:

for idx, element in ['foo', 'bar', 'baz']:
    print idx, element

for idx in xrange(3):
    print idx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM