如何更新变量以跟踪当前值减去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
分配给previous
current\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
分配给previous
current\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),如果后一个值请忽略我的答案,我将其视为前一个值。您不能自信地说不需要条带。那么一些空白区域呢?你不能自信地说不需要条纹。一些空白怎么样?