当我追加(或插入)数据时,会追加“错误数据”,列表中先前存储的数据似乎也发生了变化。
我的代码中遇到了一个非常奇怪的错误,这对我来说真的没有意义。
我正在读一个CSV文件,它的数据存储为一个列表(ratio),从该列表中我使用np.mean(),并np.std()计算平均值和非标准偏差,并把它们存储在列表中。在这些计算过程中,我调用一个函数来检查很多事情,但重要的是:
当状态发生变化时,该函数将返回一个列表(status在第一项为 1 的情况下调用。如果没有状态更改,则返回也将是一个列表,但第一项为 0。到目前为止,这里一切正常。
所以我决定将crossed所有指示状态更改的返回(来自提到的函数)添加到一个新列表(称为)中,因此if status[0] == 1: 添加到列表中的数据不是预期的。
请注意这一点:我print(status)在检查 if 的下方添加了一个if status[0] == 1: 并且它按预期返回,下一行是 a .append(status),它只是不附加它打印的内容。
status = [0,0,0,0,0,0,0]
crossed = []
for i in range((len(ratio)-periods+1)):
if i == 0: #Workaround: When i = 0, ratio[-periods-0:0] won't work
mean.append(np.mean(ratio[-periods-i:]))
std.append(np.std(ratio[-periods-i:]))
lower_std.append(mean[-1]-std[-1])
status = check_ratio(ratio[-periods],mean[-1],lower_std[-1],i,status)
if status[0] == 1:
crossed.append(status)
else:
mean.append(np.mean(ratio[-periods-i:-i]))
std.append(np.std(ratio[-periods-i:-i]))
lower_std.append(mean[-1]-std[-1])
status = check_ratio(ratio[-periods-i],mean[-1],lower_std[-1],i,status)
if status[0] == 1:
print (status)
crossed.append(status)
print(crossed)
check_ratio() 函数返回一个包含大量数据的列表,但第一项总是 0 或 1。print(status)返回是这样的:(注意每个列表都是如何以 1 开头的,正如预期的那样)
我切回了前几行和最后几行。这是我观察到的:
第一行是正确的 ( status[0]==1
) 并附加 ok
第二行是对的,但第一行(以前附加)被第二行的 2 个副本替换(如何?)
第三行是对的,但之前的数据被第三行的 3 个副本替换(第二行的行为相同)
第四行是对的,但是之前的数据没有被替换,但是每个(之前的条目)的第一项变成了 0。(参见第四个附录下面的列表)
到最后,我得到了一个毫无意义的清单。
这对我来说真的很有意义。有人能看到是什么触发了这种奇怪的行为吗?
蝴蝶不菲
相关分类