8
我有一個列表移動值,但在Python列表維持秩序
a=[1,2,3,4,5]
,並希望「移動」的值,所以它變成了
a=[2,3,4,5,1]
,下一步
a=[3,4,5,1,2]
在Python中是否有內置函數來做到這一點?
或者是有比
b=[a[-1]]; b.extend(a[:-1]); a=b
我有一個列表移動值,但在Python列表維持秩序
a=[1,2,3,4,5]
,並希望「移動」的值,所以它變成了
a=[2,3,4,5,1]
,下一步
a=[3,4,5,1,2]
在Python中是否有內置函數來做到這一點?
或者是有比
b=[a[-1]]; b.extend(a[:-1]); a=b
>>> a = [1,2,3,4,5]
>>> a.append(a.pop(0))
>>> a
[2, 3, 4, 5, 1]
這是昂貴的,但是,因爲它必須整個列表,這是O(n)的內容移動一個較短的或更好的方式。一個更好的選擇可能是使用collections.deque
(如果可用)在你的Python,它允許插入並從任一端大約O(1)時間刪除對象的版本:
>>> a = collections.deque([1,2,3,4,5])
>>> a
deque([1, 2, 3, 4, 5])
>>> a.rotate(-1)
>>> a
deque([2, 3, 4, 5, 1])
還要注意的是,這兩個解決方案涉及更改原始序列對象,而您的創建一個新列表並將其分配給a
。所以,如果我們這樣做:
>>> c = a
>>> # rotate a
用你的方法,c
將繼續指向原始,未旋轉的名單,並與我的方法,這將涉及更新,旋轉單/雙端隊列。