Czy python ma sposób na wykonanie foreach do tyłu? Mam nadzieję, że zrobię filtr() (lub zrozumienie listy) i jednocześnie odwrócę listę, aby uniknąć tego osobno (co, jak podejrzewam, będzie wolniejsze). Używam Pythona 2.4 (muszę niestety), ale jestem również ciekawy, jakie rozwiązanie do sprawdzania listy znajdzie się w Pythonie 3.0.Python's foreach backward
Edit Oba te rozwiązania wydają się być takie same:
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
Nie jestem pewien, dlaczego istnieje podejrzenie, że będzie wolniejszy, przynajmniej do pewnego stopnia, że trzeba się o to martwić. Brzmi to trochę jak przedwczesna optymalizacja. –
Po prostu wydawało mi się, że filtr() przechodzi jeden raz, a rewers() przechodzi drugi raz, więc pomyślałem, że jest sposób na zrobienie tego jednym przejściem. – shadowland
Zawsze można rozwinąć te dwa ręcznie, ale nie będzie to szybsze, jeśli napisane w Pythonie, a narzut prawie na pewno (* szczególnie * jeśli nie masz twardych danych, aby udowodnić inaczej) nie jest warte napisania rozszerzenia C moduł. A to przy założeniu, że napiszesz porównanie także w C, a ponowne wywołanie Pythona dla każdego elementu znacznie zmniejszy potencjalny zysk. – delnan