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

2024-10-01 11:22:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道Python的mapzip可以同时遍历多个列表;通过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中常见且简单的模式:

enter image description here


Tags: 函数代码map列表returninitdefa1
1条回答
网友
1楼 · 发布于 2024-10-01 11:22:41

我不确定你是否在找这个,但我猜你可以用itertools.accumulate

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]

相关问题 更多 >