2016-04-30 161 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] 
相關問題