我试着编写一个程序,从用户那里得到一个列表和一个'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]
有人能给我一个如何编写这个程序的线索吗?
答案 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]