我被卡住了:
- a list
y = (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