Python lis中的移动值但保持顺序

2024-06-05 18:33:55 发布

您现在位置: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

Tags: 函数内置单子extend
1条回答
网友
1楼 · 发布于 2024-06-05 18:33:55
>>> a = [1,2,3,4,5]
>>> a.append(a.pop(0))
>>> a
[2, 3, 4, 5, 1]

不过,这很昂贵,因为它必须移动整个列表的内容,即O(n)。如果您的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将继续引用原始的、未旋转的列表,而使用我的方法,它将引用更新的、旋转的列表/deque。

相关问题 更多 >