以循环方式移动数组

moving an array in a circular way

我试图编写一个程序,从用户那里获取一个列表和 '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]

谁能告诉我如何编写这个程序的代码?

如果要反转逻辑,请使用 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])

这可以使用切片来完成:

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