Python3reduce()函数替代使用循环,而不是使用from functools import reduce



我以前用过一个python2代码,但我想用循环代替reduce。如何重写下面的prod = reduce(lambda a, b: a * b, n)函数?

def chineeseRemainder(n, a):
sum = 0
prod = reduce(lambda a, b: a * b, n)
for n_i, a_i in zip(n, a):
p = prod // n_i
sum += a_i * Get_Multi_Inv(p, n_i) * p
return sum % prod

通常,对于没有起始值的reduce(),可以使用iternext将其转换为for循环。这个组合允许您使用iterable的第一个元素作为起始累加器值,并在其余部分上循环

iterator = iter(n)
prod = next(iterator)
for x in iterator:
prod *= x

但在乘法的特定情况下,我们知道单位元素是1,所以我们可以用它作为起始值,并乘以整个可迭代元素。

prod = 1
for x in n:
prod *= x

不是所有的函数都有这样的标识,但很多函数都有,比如+0min()math.inf等。

您还可以添加导入

from functools import reduce

我让它工作。

def reduce(function, iterable, initializer=None):
it = iter(iterable)
if initializer is None:
value = next(it)
else:
value = initializer
for element in it:
value = function(value, element)
return value

我用把它称为上面的函数

prod = reduce(function1, n)

最新更新