Батареи включены.
for i in reversed([1, 2, 3]):
print i
Нарезка списка (ls[::-1]
) отлично подходит для создания обращенной копии, но на моей машине она медленнее для итерации, даже если список уже находится в памяти:
>>> def sliceit(x):
... l = range(x)
... for i in l[::-1]:
... i
...
>>> def reverseit(x):
... l = range(x)
... for i in reversed(l):
... i
...
>>> %timeit sliceit(100)
100000 loops, best of 3: 4.04 µs per loop
>>> %timeit reverseit(100)
100000 loops, best of 3: 3.79 µs per loop
>>> %timeit sliceit(1000)
10000 loops, best of 3: 34.9 µs per loop
>>> %timeit reverseit(1000)
10000 loops, best of 3: 32.5 µs per loop
>>> %timeit sliceit(10000)
1000 loops, best of 3: 364 µs per loop
>>> %timeit reverseit(10000)
1000 loops, best of 3: 331 µs per loop
Как часто бывает в подобных случаях, разница довольно незначительна. Это может отличаться для разных версий Python (я использовал Python 2.7 для вышеуказанного теста). Реальным преимуществом использования reversed
является удобочитаемость - в большинстве случаев это будет предпочтительнее, даже если это будет стоить пару дополнительных микросекунд.