我试图编写一个程序,该程序从用户处获取列表和数字'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]
有人可以给我一个线索如何编写这个程序?
我试图编写一个程序,该程序从用户处获取列表和数字'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]
有人可以给我一个线索如何编写这个程序?
这可以做到我们ing片:
def shift(array, n):
return array[n:] + array[:n]
使用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])
所以基本上旋转阵列?你只需要一些适当的流行/移位型操作。 –
你应该在python中查看切片。 http://stackoverflow.com/questions/509211/explain-pythons-slice-notation –
它对N = 1和N = -1做同样的事情吗? –