python值和引用——【LeetCode】RotateArray

来源:互联网 发布:mac的关闭快捷键 编辑:程序博客网 时间:2024/06/05 08:36

Rotate Array

Rotate an array of n elements to the right by k steps.

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to[5,6,7,1,2,3,4].

Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this PRoblem.

Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.

 

AC代码:(Python)

1 class Solution:2     # @param nums, a list of integer3     # @param k, num of steps4     # @return nothing, please modify the nums list in-place.5     def rotate(self, nums, k):6         n = len(nums)7         k = k % n8         nums[:] = nums[n-k:] + nums[:n-k]9         

 

要注意一个问题:

A little important thing to be cautious:

nums[:] = nums[n-k:] + nums[:n-k] 

can't be written as:

nums = nums[n-k:] + nums[:n-k]

on the OJ.

The previous one can truly change the value of old nums, but the following one just changes its reference to a new nums not the value of old nums.

因为题目要求的是:

@return nothing, please modify the nums list in-place.

类似的还有:
1 def purify(lsst):2     lst = lsst[:]3     for num in lsst:4         if num % 2 == 1:5             lst.remove(num)6     return lst

这是清除 list 中的奇数,要求不要在原输入上直接修改。

注意第二行不能 写成:

lst = lsst

而应该是:
lst = lsst[:]


这样才是值相同的两个list, 否则 lst = lsst 只是一个 list 的两个引用。


值 和 引用 的问题当属 Python 里的第一大坑。
原创粉丝点击