2016-04-30 109 views

回答

12

要改变就地列表,简单地弹出其关闭,并在前面插入:

a.insert(0, a.pop()) 

演示:

>>> a = [1, 2, 3, 4, 5, 6, 7] 
>>> a.insert(0, a.pop()) 
>>> a 
[7, 1, 2, 3, 4, 5, 6] 

但是,请注意具有所有其他元素被移位为这个地方,所以在内部O的取(N)的步骤(对于列表中的N个元素)。

您还可以通过使用切片和联接创建列表对象:

a = a[-1:] + a[:-1] 

但这更低效仍像现在一样,你必须创建3个新的列表对象,加倍采取的步数。

如果您需要经常旋转列表中,您可能需要使用一个collections.deque() object来代替:

from collections import deque 

a = deque([1, 2, 3, 4, 5, 6, 7]) 
a.rotate(1) 

deque旋转是O(K)的过程,其中K是旋转的步数。

一个deque的disavantage是任意索引可以花费你到O(N)的步骤去N元素在列表中,而在常规列表索引的任何元素为O(1)固定时间。

+0

thx它效果不错 –

+0

是的,'deque'绝对是这里的正确数据结构。 – timgeb

2

弹出并插入它。

>>> a = [1,2,3,4,5,6,7] 
>>> a.insert(0, a.pop()) 
>>> a 
[7, 1, 2, 3, 4, 5, 6] 
相关问题