Python:使数组的最后一项成为第一项

Bor*_*jaX 6 python list

这是一个非常简单的问题,但我似乎无法找到一个令人满意的答案.

在Python中,最好的方法是使列表的最后一项成为第一个"推动"列表其余部分的项目.

做的事:

>>> a=[1,2,3,4]
>>> a[?????]
[4, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

我知道我总是可以玩len,列出串联...

>>> a=[1,2,3,4]
>>> [a[len(a)-1]] + a[0:len(a)-1]
[4, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

但这看起来并不正确......" Pythonic ",如果可能的话

先感谢您.

Mar*_*ers 12

切片比这更聪明; 你可以使用负数指数来计算:

a[-1:] + a[:-1]
Run Code Online (Sandbox Code Playgroud)

演示:

>>> a=[1,2,3,4]
>>> a[-1:] + a[:-1]
[4, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

这适用于将任意数量的元素移动到前面:

>>> a[-2:] + a[:-2]
[3, 4, 1, 2]
Run Code Online (Sandbox Code Playgroud)

像这样使用切片在速度上与使用.insert()+ .pop()(在短名单上)相当:

>>> timeit.timeit('a[-1:] + a[:-1]', 'a=[1,2,3,4]')
0.59950494766235352
>>> timeit.timeit('a.insert(0,a.pop(-1))', 'a=[1,2,3,4]')
0.52790379524230957
Run Code Online (Sandbox Code Playgroud)

但是,如果您需要移动多个元素,请获胜:

>>> timeit.timeit('a[-2:] + a[:-2]', 'a=[1,2,3,4]')
0.58687901496887207
>>> timeit.timeit('a.insert(0,a.pop(-1));a.insert(0,a.pop(-1))', 'a=[1,2,3,4]')
1.0615170001983643
Run Code Online (Sandbox Code Playgroud)


Ash*_*ary 8

In [103]: a=[1,2,3,4]

In [104]: a.insert(0,a.pop(-1)) # pop(-1) removes the last element 
                                # and use insert() to insert the popped
                                #  element at 0th endex

In [105]: a
Out[105]: [4, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)


kre*_*tea 8

你可能想看看deque,它是经过优化的(记忆明智的)来做你想要的,如果你做了很多这些.

from collections import deque

>>> a = deque([1,2,3,4])
>>> a.rotate(1)
... deque([4, 1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

因为我们正在做timeit比较......

>>> setup = """from collections import deque
               a = deque([1,2,3,4])"""
>>> print timeit.timeit('a.rotate(1)', setup=setup)
... 0.219103839131
Run Code Online (Sandbox Code Playgroud)