1

我在 python 中有一个列表[a,b,c,d],我通过在索引上使用 for 循环将它移到左边,结果是[b,c,d,a].

现在我计划将它向右移动,我认为结果会是[d,a,b,c],但我无法为它编写代码。

任何人都可以建议我的代码和概念吗?

这是我向左移动的代码。

def shift_left(L):
    first_item = L[0]
    for i in range (1, len(L)):
        L[i-1] = L[i] 
    L[-1] = first_item
4

3 回答 3

7

最好使用 a collections.deque

>>> from collections import deque
>>> l = ['a','b','c','d']
>>>
>>> v = deque(l)
>>> v.rotate(1)
>>> v
deque(['d', 'a', 'b', 'c'])
>>>
>>> v = deque(l)
>>> v.rotate(-1)
>>> v
deque(['b', 'c', 'd', 'a'])

您可以通过 转换回列表list(v)

于 2013-08-09T14:51:41.537 回答
5

只需使用popinsert

def shift_right(l):
    l.insert(0, l.pop())

pop删除并返回列表中的最后一项,并insert在索引处插入一项。

于 2013-08-09T14:50:52.017 回答
1

如果您的元素是单一类型,请考虑制作一个 NumPy 数组并“滚动”它:

import numpy as np
arr = np.array(my_list)
shifted_left = np.roll(arr, -1)
shifted_right = np.roll(arr, 1)
于 2013-08-09T14:52:23.790 回答