我有一个之前使用的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
答案 0 :(得分:1)
您还可以添加导入
from functools import reduce
答案 1 :(得分:0)
通常对于没有起始值的reduce()
,可以使用iter
和next
将其转换为for循环。这种组合使您可以将iterable的第一个元素用作累加器的起始值,并循环遍历其余部分。
iterator = iter(n)
prod = next(iterator)
for x in iterator:
prod *= x
但是在乘法的特定情况下,我们知道恒等元素为1
,因此我们可以将其用作起始值并乘以整个可迭代对象。
prod = 1
for x in n:
prod *= x
并非所有功能都具有这样的标识,但很多功能都具有,例如0
的{{1}}和+
的{{1}},等等。
答案 2 :(得分:0)
我正在使用它。
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)