爲什麼「枚舉」比「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)
編輯: 我記住爲什麼比
for i in xrange(len(lst)):
elem = i, lst[i]
如果不清楚爲什麼John的答案有意義,枚舉產生的結果已包含查找的列表元素。通過在for循環的變量中使用該名稱,可以清楚地說明。在您的原始版本中,您已經執行了兩次查找! – SingleNegationElimination 2009-08-29 22:10:26
@TokenMacGuy和2個評論代號:「已經包含查找到的列表元素......你已經執行了兩次查找」:這是不正確的;該元素僅從列表中提取一次;兩個版本之間的區別是'x = y'形式的多餘分配,它不涉及「查找」。 – 2009-08-29 22:54:55