问题是编写一个shift_right
函数,以便将列表中的每个元素向右移动。例如,如果列表是
L = ['a','b','c','d']
shift_right(L)
应为['d','a','b','c']
。
这就是我的尝试;我的输出是['d','a','a','a']
:
def shift_right(L):
last_item = L[-1]
for i in range(1, len(L)):
L[i] = L[i-1]
L[0] = last_item
答案 0 :(得分:3)
我会像这样实现它:
def shift_right(L):
if len(L) > 0:
L.insert(0, L.pop())
正如Lee正确评论的那样,这是一个旋转操作,而不是一个转变。
答案 1 :(得分:2)
为了完整起见,我会添加它。
如果你正在转移几个,你可以使用类似
的东西def rotate(L, n):
if len(L) is not 0:
shift = n % len(L)
L[:shift], L[shift:] = L[-shift:], L[:-shift]
如果你在整个程序中经常这样做,那么使用双端队列是值得的。 您可以将列表转换为这样的双端队列:
from collections import deque
L = deque(L)
然后向右旋转n个空格,你可以使用
L.rotate(n)
如果要将其转换回列表,可以执行
L = list(L)
最好避免来回转换,因为它需要与列表中的几次旋转一样多的时间。 当您在开始和结束时访问,添加和删除时,Deques的效果最佳。
答案 2 :(得分:0)
我刚刚想出了问题的答案。其内容如下。
def shift_right(L):
last_item = L[-1]
for i in range(1, len(L)):
L[len(L) - i] = L[len(L) - i - 1]
L[0] = last_item