在python中,轮换列表最有效的方法是什么?

>>> def rotate(l, n):
...     return l[n:] + l[:n]
... 
>>> l = [1,2,3,4]
>>> rotate(l,1)
[2, 3, 4, 1]
>>> rotate(l,2)
[3, 4, 1, 2]
>>> rotate(l,0)
[1, 2, 3, 4]
>>> rotate(l,-1)
[4, 1, 2, 3]

有更好的办法吗?

推荐答案

A collections.deque优化了两端的拉和推.他们甚至有专门的rotate()方法.

from collections import deque
items = deque([1, 2])
items.append(3)        # deque == [1, 2, 3]
items.rotate(1)        # The deque is now: [3, 1, 2]
items.rotate(-1)       # Returns deque to original state: [1, 2, 3]
item = items.popleft() # deque == [2, 3]

Python相关问答推荐

如何随着收件箱的增加动态添加到HTML表的右下角?

机器人与Pyton Minecraft服务器状态不和

如何使用Tkinter创建两个高度相同的框架(顶部和底部)?

模型序列化器中未调用现场验证器

在for循环中仅执行一次此操作

如何使用stride_tricks.as_strided逆转NumPy数组

如何根据情况丢弃大Pandas 的前n行,使大Pandas 的其余部分完好无损

如果索引不存在,pandas系列将通过索引获取值,并填充值

如何从FDaGrid实例中删除某些函数?

使用新的类型语法正确注释ParamSecdecorator (3.12)

未删除映射表的行

可变参数数量的重载类型(args或kwargs)

用Python解密Java加密文件

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

我们可以为Flask模型中的id字段主键设置默认uuid吗

计算每个IP的平均值

CommandeError:模块numba没有属性generated_jit''''

如何更改groupby作用域以找到满足掩码条件的第一个值?

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

将标签移动到matplotlib饼图中楔形块的开始处