【发布时间】:2016-04-05 00:02:48
【问题描述】:
我想在 python 的列表中旋转 k 元素。比如n=7,k=3,数组[1,2,3,4,5,6,7]旋转到[5,6,7,1,2,3,4]。
这是我写的声明。它似乎在命令行中工作。
nums = nums[k%len(nums):] + nums[:k%len(nums)]
但是当我将它封装在一个函数中时:
def rotate(nums, k):
nums = nums[k%len(nums):] + nums[:k%len(nums)]
return
我想直接修改nums,但是这个功能不起作用。
我知道我可以使用这样的 for 循环:
for i in range(k):
nums.insert(0,nums.pop())
但我想知道为什么以前的方法不起作用?
【问题讨论】:
-
您在函数内创建一个新列表,然后不返回或分配任何结果;你为什么期望它在函数之外进行更改?
-
nums=...设置局部变量nums,但不改变实际的原始列表nums。对于逆问题,请参阅stackoverflow.com/questions/2322068/… -
旁注:即使使用切片分配进行修复,如果
list的大小很大(您制作list的完整副本,然后复制回原始@ 987654332@);如果旋转序列在您的用例中很重要,请考虑使用usingcollections.deque,它可以更有效地执行旋转,并直接支持in-place rotation。