shift_right python使用for循环

时间:2013-08-03 00:50:39

标签: python

问题是编写一个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

3 个答案:

答案 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