我做了一个家庭作业,我的任务是制作一个删除最高价和最低价的脚本,并在这里打印中间价格是我的代码:
def removeall(list,value):
mylist = [n for n in list if n != value]
return mylist
prices = removeall(prices,highest)
我知道我可以让它像以下一样工作:
{{1}}
但我的问题是为什么removeall()不会改变价格?它不是通过引用传递的吗?
答案 0 :(得分:2)
Python参数与其他语言中的引用并不完全相同。它更像是一个通过值传递的指针。如果您将指针修改为指向其他内容,则调用代码不会看到更改。
要进行在函数外部可以看到的更改,您需要在适当的位置修改列表。一种简单的方法是使用切片赋值:
list[:] = [n for n in list if n != value]
这会更改现有列表,而不仅仅是重新绑定list
变量。 (注意,这是一个非常糟糕的变量名称,因为它会影响内置list
类型。我强烈建议将其作为局部变量名称避免使用!)
答案 1 :(得分:0)
您的removeall
功能并未改变传入的列表,它正在创建一个新列表,将其打印出来然后扔掉。