切片比这更聪明一点;您可以使用负索引从末尾开始计数:
a[-1:] + a[:-1]
演示:
>>> a=[1,2,3,4]
>>> a[-1:] + a[:-1]
[4, 1, 2, 3]
这适用于要移动到前面的任意数量的元素:
>>> a[-2:] + a[:-2]
[3, 4, 1, 2]
像这样使用切片在速度上与使用.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
但是如果您需要移动多个元素,则可以胜出:
>>> 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