Let’s say that we have a Python List (or 1-D numpy array) and we want to shift it by n positions. Let’s see some ways of how we can do it.
Using pop
Assume that the list x is [1,2,3,4,5] let’s see how we can shift it by one position ahead.
x = [1,2,3,4,5] x.append(x.pop(0)) x
[2, 3, 4, 5, 1]
Using Collection deque
This method allows us to shift by n elements ahead at once, using both directions, forward and backward. We just need to use the rotate
method on the deque
object. Note, that you can easily convert a deque
object to a list
like list(x)
where x is a deque
object.
import collections x = collections.deque([1, 2, 3, 4, 5]) x.rotate(1) x
deque([5, 1, 2, 3, 4])
Note, that we also rotate it backwards by 2 steps:
x = collections.deque([1, 2, 3, 4, 5]) x.rotate(-2) x
deque([3, 4, 5, 1, 2])
Using numpy roll
Finally, we can use the roll
method to the numpy arrays. It also supports both directions and n steps. For example:
import numpy x=numpy.arange(1,6) numpy.roll(x,1)
array([5, 1, 2, 3, 4])
Or, if we want to get 2 steps backwards:
x=numpy.arange(1,6) numpy.roll(x,-2)
array([3, 4, 5, 1, 2])