带函数的列表上的嵌套循环



我被卡住了:

  • a listy = (1,2,3...)
  • a函数func(A,B)
  • a常数C

我如何用循环来表达这种情况?

B1 = func(C , y[0])
B2 = func(B1 , y[1])
B3 = func(B2 , y[2]) #.... and so on.

第一个参数只是前一个调用的返回值,从C开始:

result = C
for yval in y:
result = func(result, yval)

正如在注释中指出的,这个模式是由经常被忽略的reduce函数捕获的。(在某种程度上被忽略了,因为它在Python 3中从内置命名空间降级为functools模块。)

from functools import reduce

result = reduce(func, y, C)

有几种方法可以做到:

首先,常规循环:

C = ...  # the constant
b = C
for i in y:
b = func(b, i)

但使用这样的减少,是我的首选方式:

from functools import reduce
b = reduce(func, y, C)  # the last arg being the initial item used

您也可以使用海象符号,它只在保存中间状态时有用(IMO)。

bs = [(b := func(b, yi)) for yi in y)]
b  # b being the end result