在python中修改函数中的int列表

时间:2015-12-31 00:13:07

标签: python algorithm

我想在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())

但我想知道为什么以前的方法不起作用?

3 个答案:

答案 0 :(得分:2)

你想要的是切片分配:

nums[:] = nums[k%len(nums):] + nums[:k%len(nums)]

这会改变传入的列表,因此在函数返回后可以看到更改。仅分配给nums只会使nums指向函数内的不同列表;它不会影响原始列表。

答案 1 :(得分:1)

您确定要修改nums吗?即使您不修改nums,也无需创建单独的列表。以下方法的一个优点是它可以用于任何序列。

nums = [x + 1 for x in range(7)]
nums[:] = rotate(nums,-10)

如果你坚持按照你的意思修改nums,你仍然可以这样做。如,

OpCodes.Ret

答案 2 :(得分:0)

函数内的nums仅在该函数内。所以你需要从那个函数返回它。一种方法是这样的(python 2.7代码,如果使用3.x,则将括号添加到print):

nums = [1, 2, 3, 4, 5, 6, 7]
k = 3


def rotate(nums, k):
    return nums[k%len(nums):] + nums[:k%len(nums)]

print 'Original', nums
nums = rotate(nums, k)
print 'Rotated', nums