可能重複:
Only index needed: enumerate or (x)range?範圍(len(list))還是枚舉(list)?
其中哪些會被認爲是更好/更清晰/更快/更 'Python化'?我不在意列表L
的內容,只是它有多長。
a = [f(n) for n, _ in enumerate(L)]
或
a = [f(n) for n in range(len(L))]
如果這有什麼差別,功能f
利用的len(list)
爲好。
可能重複:
Only index needed: enumerate or (x)range?範圍(len(list))還是枚舉(list)?
其中哪些會被認爲是更好/更清晰/更快/更 'Python化'?我不在意列表L
的內容,只是它有多長。
a = [f(n) for n, _ in enumerate(L)]
或
a = [f(n) for n in range(len(L))]
如果這有什麼差別,功能f
利用的len(list)
爲好。
一些快速定時運行似乎給使用range()
略佔優勢的第二個選項在enumerate()
:
timeit a = [f(n) for n, _ in enumerate(mlist)]
10000 loops, best of 3: 118 us per loop
timeit a = [f(n) for n in range(len(mlist))]
10000 loops, best of 3: 102 us per loop
,只是使用xrange()
(Python的V2.7.2)樂趣
timeit a = [f(n) for n in xrange(len(mlist))]
10000 loops, best of 3: 99 us per loop
我會首先使用可讀代碼,然後使用xrange()
(如果可用)(即Pre-Python v 3.x),然後使用range()
和enumerate()
。
當您想要重複訪問其索引處的列表項時,枚舉速度會更快。當你只需要一個索引列表時,使用len()和range/xrange會更快。 – 2016-11-20 17:31:36
(x)範圍解決方案速度更快,因爲它具有更少的開銷,所以我會使用它。
在Python 2.x中,使用xrange
而不是range
,因爲xrange
使用較少的內存,因爲它不創建臨時列表。在Python 3.x中,只有range
,這是內存較少的版本。
xrange是發電機對象嗎? [documentation](http://docs.python.org/library/functions.html#xrange)沒有提到這個詞,儘管你的描述聽起來像是這樣。 – 2012-08-16 15:08:29
它不是一個生成器對象(即它的主體中帶有'yield'的純Python代碼),但它等同於用C實現的那個對象。它有一個'.next()'方法,它返回下一個值或引發StopIteration,並且'for'循環重複調用這個'.next()'方法。 (如果您覺得它有用,請將我的答案投票。) – pts 2012-08-17 12:25:03
我會說,因爲您沒有使用enumarate函數的「_」屬性,所以使用範圍,因爲它更具可讀性。
假設你使用Python 2.x,如果你使用len()
,你應該使用xrange()
,因爲它可以避免創建一個範圍內的數字列表。
而在這種情況下,我會用len()
,因爲您使用的是索引,而不是列表中的項目。
你使用的是什麼版本的python? – 2012-08-16 15:04:23
@InbarRose - 2.7 – 2012-08-16 15:04:50