在Python中实现同步迭代/折叠的快速方法

在Python中实现同步迭代/折叠的快速方法,python,Python,我知道Python方便的map和zip可以同时遍历多个列表;使用zip,我们可以获得循环中所有列表参数的i-th元素。但我想知道Python是否还有其他方便的函数用于更复杂的情况 例如,下面的程序模拟了一个场景,其中我们有一个初始值,并一起迭代两个列表。它就像一个有信用和借记的银行账户 a0 = [6, 6, 6, 6, 6] a1 = [1, 1, 1, 1, 1] init = 100 def f(x, e0, e1): return x + e0 - e1 def myIter

我知道Python方便的
map
zip
可以同时遍历多个列表;使用
zip
,我们可以获得循环中所有列表参数的
i-th
元素。但我想知道Python是否还有其他方便的函数用于更复杂的情况

例如,下面的程序模拟了一个场景,其中我们有一个初始值,并一起迭代两个列表。它就像一个有信用和借记的银行账户

a0 = [6, 6, 6, 6, 6]
a1 = [1, 1, 1, 1, 1]
init = 100

def f(x, e0, e1):
    return x + e0 - e1

def myIterFold(f, init, a0, a1):
    e_0 = f(init, a0[0], a1[0])
    result = [e_0]
    for i in range(1, len(a0)):
        e_i = f(result[i-1], a0[i], a1[i])
        result.append(e_i)
    return result

print(myIterFold(f, init, a0, a1)) # [105, 110, 115, 120, 125]
上面的代码使用索引循环1)实现一种折叠,2)并返回一个包含中间结果(而不仅仅是最终结果)的列表。有人知道Python是否有任何快速的函数或方法来重写此代码吗

PS:我问这个问题,因为我想看看Python如何实现/模拟这项任务,这是Excel中常见且简单的模式:


我不确定你是否在找这个,但我猜你可以使用
itertools。累加

from itertools import accumulate

a0 = [6, 6, 6, 6, 6]
a1 = [1, 1, 1, 1, 1]
e = 100

lst = [e] + [x - y for x, y in zip(a0, a1)]
print(list(accumulate(lst))[1:])

# [105, 110, 115, 120, 125]

你能用文字解释一下你想要什么,这样不懂OCaml的人就可以回答了吗?@user2357112我刚刚用Python代码替换了OCaml代码。谢谢<在这种情况下,code>accumulate很好,但是如果我的函数是
def(x,e0,e1):返回x*e0/e1
?让我们只使用
def(x,e0,e1):返回x*e0/e1
,而不是
def(x,e0,e1):返回x+e0-e1
,尽管前者没有明显的具体含义。因此,从上面的例子来看,它应该输出100*6100*6*6100*6*6?是的,
[600、3600、21600,…]
。您的代码足够好,因为您使用了函数
f()
,所以可以将其更改为应用任何操作。Python中没有快速的函数来实现这一点<代码>累积只是方便添加。