如何更新变量以跟踪当前值减去Python中以前的值?
假设我有一个包含以下数据的文本文件:如何更新变量以跟踪当前值减去Python中以前的值?,python,for-loop,text-files,Python,For Loop,Text Files,假设我有一个包含以下数据的文本文件: 9.079929479691208 12.97415710230641 29.298703770316134 27.948996122147257 22.226701761850222 24.87655187612297 34.411572810292476 如果文件名为text.txt,我尝试过这样做,但不起作用: previous_val = 0 current_val = 0 file = open("text.txt","r") for line
9.079929479691208
12.97415710230641
29.298703770316134
27.948996122147257
22.226701761850222
24.87655187612297
34.411572810292476
如果文件名为text.txt,我尝试过这样做,但不起作用:
previous_val = 0
current_val = 0
file = open("text.txt","r")
for line in file:
line = line.strip()
rows = line.split(" ")
values = float(rows[0])
current_val = float(values - previous_val)
print(current_val)
第一个值应保持与9.079相同。。。因为之前什么都没有,但下一个应该是3.whatver因为12.974…-9.079... = 不管怎样。它应该一直这样做。当我运行程序时,它只返回与文本文件中完全相同的数字。如果有人能帮我,我会非常感激。谢谢 在为
previous\u val
赋值为零后,您不会更改它的值,因此current\u val=float(values-previous\u val)
相当于current\u val=float(values)
你想要:
current_val, previous_val = float(values - previous_val), current_val
这会将
current\u val
分配给差值,将previous\u val
分配给previouscurrent\u val在将previous\u val
的值分配为零后,您永远不会更改它的值,因此current\u val=float(值-previous\u val)
相当于current\u val=float(值)
你想要:
current_val, previous_val = float(values - previous_val), current_val
这会将current\u val
分配给差异,将previous\u val
分配给previouscurrent\u val
在每次迭代中更改previous\u val
。看看这个:
previous_val = 0
file = open("text.txt","r")
for line in file:
current = float(line.strip())
print current - previous_val
previous_val = current
输出:
9.07992947969
3.89422762262
16.324546668
-1.34970764817
-5.7222943603
2.64985011427
9.53502093417
在每次迭代中更改上一个值。看看这个:
previous_val = 0
file = open("text.txt","r")
for line in file:
current = float(line.strip())
print current - previous_val
previous_val = current
输出:
9.07992947969
3.89422762262
16.324546668
-1.34970764817
-5.7222943603
2.64985011427
9.53502093417
在python3中,您可以使用来实现您想要的:
>>> from itertools import accumulate
>>> with open("text.txt","r") as file:
... list(accumulate((float(line.strip()) for line in file), lambda a, b: b-a))
[9.079929479691208,
3.894227622615203,
25.404476147700933,
2.544519974446324,
19.6821817874039,
5.194370088719072,
29.217202721573404]
它很容易实现,python3中的文档中提供了一个参考实现,您可以使用它来实现您想要的:
>>> from itertools import accumulate
>>> with open("text.txt","r") as file:
... list(accumulate((float(line.strip()) for line in file), lambda a, b: b-a))
[9.079929479691208,
3.894227622615203,
25.404476147700933,
2.544519974446324,
19.6821817874039,
5.194370088719072,
29.217202721573404]
实现累加非常容易,文档中提供了一个参考实现您不想要分数部分吗?@AhsanulHaque是的,我想要整数。不管它是不是一个分数,你忘了给循环中的previous\u val
赋值;它始终保持为0,这就是为什么您只得到与文件相同的输出。当您说继续这样做时,下一个值是25.4(29.29-3.89)还是16.32(29.29-12.97),如果后者请忽略我的回答,我将其理解为前者。您不想要分数部分吗?@AhsanulHaque是的,我想要整数。不管它是不是一个分数,你忘了给循环中的previous\u val
赋值;它始终保持为0,这就是为什么您只能获得与文件相同的输出。当您说“继续这样做”时,下一个值是25.4(29.29-3.89)还是16.32(29.29-12.97),如果后一个值请忽略我的答案,我将其视为前一个值。您不能自信地说不需要条带。那么一些空白区域呢?你不能自信地说不需要条纹。一些空白怎么样?