问题:给定一个整数数组 nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
使用代码如下没有办法通过测试示例,必须将最后一行代码改成 nums[:]=nums[-k:]+nums[:-k]切片形式:
原因:列表的切片操作 nums[start:end]
不会修改原列表,而是返回一个新的列表对象
例如:
nums = [1, 2, 3, 4, 5]
print(nums[-2:]) # 输出 [4, 5]
print(nums[:-2]) # 输出 [1, 2, 3]
print(nums) # 原列表 nums 没有改变,仍为 [1, 2, 3, 4, 5]
拼接两个切片:
nums[-k:] + nums[:-k]
是将两个切片的结果拼接成一个新的列表。- 它不会影响原来的
nums
列表。
nums = [1, 2, 3, 4, 5]
k = 2result = nums[-k:] + nums[:-k]
print(result) # 输出 [4, 5, 1, 2, 3]
print(nums) # 原列表 nums 不变,仍为 [1, 2, 3, 4, 5]
尽管我们令nums= nums[-k:] + nums[:-k],它其实相当于重新创建了一个列表,只是名称一样而已,但已经指向了别的地址了
切片赋值:nums[:] = nums[-k:] + nums[:-k]
nums[:]
是对原列表的切片赋值,它会修改原列表的内容,而不会更改nums
的引用。- 换句话说,
nums[:]
表示“更新整个列表的内容为右侧表达式的结果”。
操作 | 是否修改原列表 nums | 备注 |
---|---|---|
nums[-k:] + nums[:-k] | 否 | 生成一个新列表,不影响原列表 nums 。 |
nums = nums[-k:] + nums[:-k] | 否(仅改变引用) | 创建新列表并重新赋值给 nums ,原列表可能被丢弃。 |
nums[:] = nums[-k:] + nums[:-k] | 是 | 更新原列表 nums 的内容为右侧表达式的结果,但列表引用保持不变。 |