引例
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置。
1. 右移
输入样例
6 2 # 一个六位数的列表 向右移动两个位置
1 2 3 4 5 6 # 六位数的列表
输出样例
5 6 1 2 3 4
代码
n = input().split() # 输入N位数的列表和移动的个数
m = int(n[1])
num = list(input().split()) # 输入列表
for i in range(m):
num.insert(0, num.pop()) # 右移
for x in range(len(num)): # 输出
if x!=len(num)-1:
print(num[x], end=' ')
else:
print(num[x], end='')
2. 左移
# 方法一
for i in range(m):
num.insert(len(num), num[0])
num.remove(num[0])
# 方法二
for i in range(m):
p = num.pop(0)
num.append(p)
3. 方法扩展
双端队列deque有一个rotate可以方便的解决左移右移问题。
# 用法示例
>>> from collections import deque
>>> queue = deque(range(5))
>>> queue
deque([0, 1, 2, 3, 4])
>>> queue.rotate(3)
>>> queue
deque([2, 3, 4, 0, 1])
>>> queue.rotate(-1)
>>> queue
deque([3, 4, 0, 1, 2])
from collections import deque
nums_list = deque(num)
nums_list.rotate(2) # 正数表示向右移动,负数表示向左移动
# nums_list.rotate(-2)
print(nums_list) # deque([5, 6, 1, 2, 3, 4])
print(list(nums_list)) # [5, 6, 1, 2, 3, 4]