【发布时间】:2011-01-10 03:25:59
【问题描述】:
在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]
有没有更好的办法?
【问题讨论】:
-
这并不是真正的转变,因为其他语言(Perl、Ruby)使用该术语。这是旋转。也许问题应该相应更新?
-
@dzhelil 我真的很喜欢你原来的解决方案,因为它不会引入突变
-
我认为
rotate是正确的词,而不是shift。 -
真正的正确答案是,你不应该首先轮换列表。创建一个“指针”变量指向列表中您希望“头”或“尾”所在的逻辑位置,并更改该变量而不是移动列表中的任何项目。查找“模”运算符 % 以获得将指针“包裹”在列表开头和结尾的有效方法。