我无法通过很多this problem的测试用例。我运行了函数以及法官将用于在我的本地机器上测试函数的代码,发现问题在于当调用nums
时,nums
不会在函数removeDuplicates()
外部更新,而是在函数内部更新。为什么会这样?Aren't python列表在传入函数时通过赋值调用?
def removeDuplicates(nums):
nums_ = set(nums)
nums = []
for i in nums_:
nums.append(i)
print(nums)
# not working even if I do nums = list(set(nums)) instead of all lines above
return len(nums)
nums = [1,1,2]
expectedNums = [1,2]
k = removeDuplicates(nums)
if k != len(expectedNums):
print(False)
for i in range(k):
if nums[i] != expectedNums[i]:
print(False)
print(nums, expectedNums)
break
输出:
错误[1,1,2]
[1、2]
之前我使用了nums = list(set(nums))
,而不是清空列表并追加所有唯一元素,但即使这样也不起作用。
1条答案
按热度按时间z2acfund1#
线路:
重新绑定局部变量
nums
,使其不再指向最初传入的列表,而是指向新创建的列表。如果您执行以下操作:
那么你是在改变原始列表而不是创建一个新列表。
请记住,
=
操作符重新绑定变量,而不是修改变量引用的对象。Obligatory Ned Batchelder link.
注意,
[] =
下标赋值也允许你改变一个列表(因为你没有给变量赋值,而是给变量引用的对象中的索引或切片赋值)。你可以很简单地把你的函数写为: