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
将继续指向原始,未旋转的名单,并与我的方法,这将涉及更新,旋转单/双端队列。