2024-06-05 18:33:55 发布
网友
我有一张单子
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)。如果您的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。如果我们这么做了:
a
>>> c = a >>> # rotate a
使用您的方法,c将继续引用原始的、未旋转的列表,而使用我的方法,它将引用更新的、旋转的列表/deque。
c
不过,这很昂贵,因为它必须移动整个列表的内容,即O(n)。如果您的Python版本中提供了^{} ,那么最好使用它,这样可以在大约O(1)个时间内从任意一端插入和移除对象:
还要注意,这两种解决方案都涉及更改原始序列对象,而您的解决方案创建一个新列表并将其分配给
a
。如果我们这么做了:使用您的方法,
c
将继续引用原始的、未旋转的列表,而使用我的方法,它将引用更新的、旋转的列表/deque。相关问题 更多 >
编程相关推荐