Does python have a means of doing foreach backwards? I'm hoping to do a filter() (or list comprehension) and reverse a list at the same time, so that I can avoid doing it separately (which I suspect will be slower). I'm using python 2.4 (I have to unfortunately), but I'm also curious what the list comprehension solution would be in python 3.0.
Edit Both of these solutions appear to be the 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
But Python does have a built-in reversed function. If you wrap range() inside reversed() , then you can print the integers in reverse order. range() makes it possible to iterate over a decrementing sequence of numbers, whereas reversed() is generally used to loop over a sequence in reverse order.
To use the forEach() method on an array in reverse order:Use the slice() method to get a copy of the array. Use the reverse() method to reverse the copied array. Call the forEach() method on the reversed array.
Use the reversed() function to iterate over a string in reverse order, e.g. for char in reversed(my_str): . The reversed() function takes an iterator, such as a string, reverses it and returns the result. Copied!
To reverse a Python list in place, use the reverse() method. If you only need to create a reversed iterator, use the reversed() function.
You are looking for the built-in reversed()
:
>>> for i in reversed(range(5)):
... print i
...
4
3
2
1
0
This iterates over the sequence in reverse, without creating an additional copy of your list.
It is not the right way to do it in the same time with filtering. Just use reverse
, it will be much more optimized than doing it manually.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With