以循环方式移动数组
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]
我试图编写一个程序,从用户那里获取一个列表和 '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]