我正在编写一个程序,从给定的排序列表中删除重复的元素。我编写了函数“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)
因为如果你在
removeDuplicates
中的第二行:这将生成通过引用传递的列表参数
nums
的新副本,并且重复数据消除操作将修改副本而不是原始列表。你知道吗你的函数还有其他问题,没有那一行我就得到了输出:
看看这个很好的答案,可以找到更好的方法:https://stackoverflow.com/a/7961390/11776945
错了。您可以从
nums
和新元素创建一个新的列表,然后使局部变量nums
指向该新列表。然后在新列表上进行良好的操作,并退出函数而不保存结果。你知道吗试试看
输出:
你的问题是:
因为您正在将nums重新分配给一个新值。相反,请尝试:
这样,您就可以就地更改nums的值,这意味着您在整个函数中仍然引用同一个对象,而不是创建新对象。你知道吗
相关问题 更多 >
编程相关推荐