How do you reverse the elements in a sequence or
along one dimensions in an array
(like the reverse
function
in IDL)?
If the sequence is a list, just use the reverse
method:
>>> a = [1, 2, -6, 4, -8]
>>> a.reverse()
>>> a
[-8, 4, -6, 2, 1]
Tuples, of course, are immutable, so they can't be reversed in place like lists.
For a Numeric
array,
there isn't a reverse
method.
Instead you do this through extended indices:
>>> a = Numeric.array([1, 2, -6, 4, -8])
>>> a = a[::-1]
>>> a
array([-8, 4, -6, 2, 1])
For a 2-D array:
>>> a = Numeric.array([[1, 2, -6, 4, -8], [-2, 3, 7, 9, -1]])
array([[ 1, 2, -6, 4, -8],
[-2, 3, 7, 9, -1]])
>>> b = a[:,::-1]
>>> b
array([[-8, 4, -6, 2, 1],
[-1, 9, 7, 3, -2]])
>>> c = a[::-1,:]
>>> c
array([[-2, 3, 7, 9, -1],
[ 1, 2, -6, 4, -8]])
The syntax of extended indexing is start:stop:stride
.
When the start
and stop
values are left
out, the interpreter automatically specifies the entire sequence.
A stride of -1
decrements element index by 1.
Remember in Python sequence indexing the start
index
is included while the stop
index is excluded.
Extended array indexing is supported on lists and
tuples starting with Python 2.3.
Martelli (2003) gives a comprehensive and concise discussion of sequence slicing (pp. 47, 207-308).