Питон foreach задом наперед - PullRequest
8 голосов
/ 01 ноября 2011

Есть ли у python средства для выполнения foreach задом наперед?Я надеюсь сделать filter () (или понимание списка) и перевернуть список одновременно, чтобы избежать отдельного выполнения (что, я подозреваю, будет медленнее).Я использую Python 2.4 (я, к сожалению, должен), но мне также любопытно, каким будет решение для понимания списков в Python 3.0.

Редактировать Оба эти решения кажутсято же самое:

python -m timeit -s 'x=[1,2,3,4,5]*99; filter(lambda x: x == 5, reversed(x))' 
100000000 loops, best of 3: 0.0117 usec per loop
python -m timeit -s 'x=[1,2,3,4,5]*99; x.reverse(); filter(lambda x: x == 5, x)'    
100000000 loops, best of 3: 0.0117 usec per loop

Ответы [ 3 ]

18 голосов
/ 01 ноября 2011

Вы ищете встроенный reversed():

>>> for i in reversed(range(5)):
...     print i
... 
4
3
2
1
0

Это повторяет последовательность в обратном порядке, без создания дополнительной копии вашего списка.

1 голос
/ 01 ноября 2011

Вот хорошая компиляция того, что вы могли бы сделать для обратной итерации: http://christophe -simonis-at-tiny.blogspot.com / 2008/08 / python-reverse-enumerate.html

1 голос
/ 01 ноября 2011

Это не правильный способ сделать это одновременно с фильтрацией.Просто используйте reverse, это будет гораздо более оптимизировано, чем делать это вручную.

...