为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在函数内修改列表不会改变列表?

为什么在函数内修改列表不会改变列表?

holdtom 2022-06-07 19:54:07
我正在编写一个程序来从给定的排序列表中删除重复的元素。我编写了函数“removeDuplicates”来对列表进行一些修改,并在函数末尾打印更新的列表。由于列表是通过引用传递的,问题是为什么更改不适用于函数外部的列表。def removeDuplicates(nums):    c = 0    nums = nums + [nums[-1] + 1]  # add a dummy element to the end of the list    for i in range(len(nums) - 1):        if nums[i] != nums[i + 1]:            nums[c] = nums[i]            c = c + 1    nums.pop()    print(nums)if __name__ == "__main__":    nums = [1, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5]    removeDuplicates(nums)    print(nums)
查看完整描述

4 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

你的问题是:

nums = nums + [nums[-1] + 1]

因为您正在将 nums 重新分配给新值。相反,请尝试:

nums.append(nums[-1] + 1)

这样,您就可以更改 nums 的值这意味着您仍然在整个函数中引用同一个对象,而不是创建一个新对象。


查看完整回答
反对 回复 2022-06-07
?
SMILET

TA贡献1796条经验 获得超4个赞

nums = nums + [nums[-1] + 1]  # add a dummy element to the end of the list

错误的。您专门从新元素创建一个列表nums,然后使您的局部变量nums指向该新列表。然后您在新列表上很好地操作并退出函数而不保存结果。

尝试

nums.append(nums[-1] + 1)  # add a dummy element to the end of the list

输出:

[1, 2, 3, 4, 5, 3, 4, 4, 4, 5, 5]


查看完整回答
反对 回复 2022-06-07
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

如其他答案中所述,问题在于您添加虚拟元素时。nums您正在创建变量的新副本。为避免这种情况,您可以使用np.append()此处建议的方法或简单地替换

nums = nums + [nums[-1] + 1]

nums += [nums[-1] + 1]

这样您就不会创建新列表。


查看完整回答
反对 回复 2022-06-07
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

这是因为如果你的第二行在removeDuplicates:


nums = nums + [nums[-1] + 1]  # add a dummy element to the end of the list

这会生成nums通过引用传递的列表参数的新副本,并且您的重复数据删除操作会修改副本而不是原始列表。


您的函数还有其他问题,没有那行我得到输出:


>>> nums = [1, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5]

>>> removeDuplicates(nums)

[1, 2, 3, 4, 2, 3, 4, 4, 4, 5]


查看完整回答
反对 回复 2022-06-07
  • 4 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信