Почему «перечислять» медленнее, чем «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: я иметь в виду, почему
for i, v in enumerate(lst):
elem = i, v
медленнее, чем
for i in xrange(len(lst)):
elem = i, lst[i]
Если непонятно, почему ответ Джона имеет смысл, результат, полученный путем перечисления, уже содержит элемент списка поиска. Используя это имя в переменных for-loop, вы сделаете это понятным. в вашей первоначальной версии вы дважды выполнили поиск! – SingleNegationElimination
@TokenMacGuy и 2 комментария: «уже содержит элемент списка поиска ... вы дважды выполнили поиск»: это неверно; элемент извлекается из списка только ONCE; разница между этими двумя версиями является избыточным назначением формы 'x = y', которая не требует« поиска ». –