以圆形方式移动阵列

时间:2016-02-02 21:15:20

标签: python arrays list numbers

我试着编写一个程序,从用户那里得到一个列表和一个'N'个步骤。该程序将以循环方式移动到列表中。如果数字为正数,则列表中的项目将向左移动N步,如果N为负数,则项目将向右移动N步。如果N = 0,则列表不会改变。

L=[1,2,3,4,5]
if N==0  > [1,2,3,4,5]
if N==1  > [2,3,4,5,1]
if N==-1 > [5,1,2,3,4]

有人能给我一个如何编写这个程序的线索吗?

2 个答案:

答案 0 :(得分:4)

如果要颠倒逻辑,请使用deque并否定n

from collections import deque

deq = deque([1, 2, 3, 4, 5])
n = 0
deq.rotate(-n)
print(deq)

deq = deque([1, 2, 3, 4, 5])
n = 1
deq.rotate(-n)
print(deq)

deq = deque([1, 2, 3, 4, 5])
n = -1
deq.rotate(-n)
print(deq)

输出:

deque([1, 2, 3, 4, 5])
deque([2, 3, 4, 5, 1])
deque([5, 1, 2, 3, 4])

n可以大于元素数量,旋转仍然有效:

In [5]: deq = deque([1, 2, 3, 4, 5])

In [6]: deq.rotate(12)

In [7]: deq
Out[7]: deque([4, 5, 1, 2, 3])

答案 1 :(得分:2)

这可以使用切片来完成:

def shift(array, n):
    return array[n:] + array[:n]