微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 list.append() 的 Python 意外行为

如何解决带有 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 举报,一经查实,本站将立刻删除。