如何解决带有 list.append() 的 Python 意外行为
我正在使用机器学习模型,我尝试将他的输出附加到另一个列表中的每个元素的列表中。 我使用了 for 循环,但似乎循环会跳转第一个索引并重复最后一个索引:
x = [[0.12],[0.36],[0.48]]
print(model.run(x[0])) #this prints [-0.0006]
print(model.run(x[1])) #this prints [-0.0018]
print(model.run(x[2])) #this prints [-0.0024]
out_values = []
for value in x:
out_values.append(model.run(value))
print(out_values) #this should print [[-0.0012],[-0.0018],[-0.0024]]
# but it actually prints [[-0.0018],[-0.0024],[-0.0024]]
model.run() 输出似乎没有问题,因为第一个打印语句运行良好 它必须与 out_values.append() 相关,因为如果我运行:
x = [[0.12],[0.48]]
out_values = []
out_values.append(model.run(x[0]))
out_values.append(model.run(x[1]))
out_values.append(model.run(x[2]))
print(out_values) # the result I get is still [[-0.0018],[-0.0024]]
在我看来,它不应该跳过 model.run(x[0]) 并重复 model.run(x[2]) 两次
这是记录在案的还是应该发生的?还是我做错了什么?
解决方法
它不会跳过任何值或重复任何其他值两次。您的 model.run 必须仅返回这些值。为了消除这个疑问,您能否更新代码以打印返回值并像这样打印:
for value in x:
ans = model.run(value)
print(ans)
out_values.append(ans)
你能显示上面的输出吗?
,你能用这个代码代替吗?
x = (0.12,0.36,0.48)
print(x[0]) #this prints [-0.0006]
print(x[1]) #this prints [-0.0018]
print(x[2]) #this prints [-0.0024]
out_values = []
out_values = set(x)
print(out_values)
它将在 out_values 中包含所有 x
,我认为问题在于 model.run
正在返回对模型中可变状态的引用,该引用在连续 run
调用时更新——这就是为什么在 run
之后立即打印的内容之间存在差异的原因{1}} 以及额外调用后列表中的内容。 IE。该值在您调用 append
时是正确的,但事后会发生变化。当您调用 model.run(x[2])
时,它会修改并返回您调用 model.run(x[1])
时返回的列表,有时还会修改为 x[0]
返回的列表。 (这不是 IMO 的良好行为——如果 model
来自外部库,希望它至少在 API 中记录,您不应该保留对 run
的返回值的引用!否则它只是简单的恶魔般的。)
要解决此问题,以便您可以保留最初返回的每个结果,请在获得时复制每个结果:
out_values = [model.run(value).copy() for value in x]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。