【发布时间】:2020-04-21 17:06:03
【问题描述】:
我不确定为什么l 会被find() 函数修改。我想由于我在另一个函数中使用了不同的变量,l 不会被函数修改,因为它不是全局的。
我通过在每个打印语句之前复制和粘贴 l = [2, 4, 6, 8, 10] 来确保代码中没有错误,并且它返回了正确的输出,这意味着 l 正在被函数更改。我还从 main 中删除了 main 函数,基本上使它完全是全局的,但它仍然给出了最初的糟糕结果。
我不确定这是否与我对 Python 的理解有关,因为我是 Python 的初学者,而且我来自 Java。
这是代码和结果:
def find(list, user):
while True:
n = len(list)
half = int(n/2)
if n == 1:
if user != list[0]:
return "Bad"
else:
return "Good"
elif user == list[half]:
return "Good"
elif user > list[half]:
del list[0:half]
elif user < list[half]:
del list[half:n]
print(list)
if __name__ == "__main__":
l = [2, 4, 6, 8, 10]
print(find(l, 5)) # should print Bad
print(find(l, 10)) # should print Good
print(find(l, -1)) # should print Bad
print(find(l, 2)) # should print Good
但它会返回
[2, 4]
[4]
Bad
Bad
Bad
Bad
【问题讨论】:
-
del ...正在修改原始列表,因为您传入的不是列表的副本,而是对原始列表本身的引用。最简单的解决方法是传入列表的副本:find(l[:], 5) -
为什么在
find()中使用print(list)?不应该是return text。 -
您应该采用基于索引的方法,而不是使用
del。 -
变量
list只是对原始列表l的引用。因此,当您修改变量list时,原始列表也会被修改。另外请避免使用list作为变量名,因为它们是python 中的关键字。如果您想修改列表,只需复制一份即可。
标签: python search binary global