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

时间:2018-11-02 02:45:24

标签: python python-3.x python-2.7

我有一个之前使用的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

3 个答案:

答案 0 :(得分:1)

您还可以添加导入

from functools import reduce

答案 1 :(得分:0)

通常对于没有起始值的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

并非所有功能都具有这样的标识,但很多功能都具有,例如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)