列表理解作为Python中的reduce()的替代

F. *_*ler 20 python list-comprehension list python-3.x

以下python教程说:

列表理解是lambda函数以及功能完整的替代品map(),filter()reduce().

http://python-course.eu/python3_list_comprehension.php

但是,它没有提到列表理解如何替代a reduce()的示例,我无法想象它应该如何成为可能.

可以请某人解释如何通过列表理解实现类似减少的功能或确认它不可能吗?

the*_*eye 17

理想情况下,列表理解是创建一个新列表.引用官方文档,

列表推导提供了创建列表的简明方法.常见的应用是创建新的列表,其中每个元素是应用于另一个序列的每个成员或可迭代的一些操作的结果,或者创建满足特定条件的那些元素的子序列.

reduce用于将可迭代减少到单个值.引用functools.reduce,

将两个参数的函数累加到序列项中,从左到右,以便将序列减少为单个值.

因此,列表理解不能用作替代品reduce.


sta*_*her 5

一开始我很惊讶地发现 Python 的创建者 Guido van Rossum 反对reduce. 他的推理是,除了求和、乘法、与运算和或运算之外,使用reduce还会产生一个不可读的解决方案,该解决方案更适合迭代和更新累加器的函数。他关于此事的文章在这里。所以不,没有列表理解替代reduce,相反,“pythonic”方式是以老式方式实现累积函数:

代替:

out = reduce((lambda x,y: x*y),[1,2,3])

使用:

def prod(myList):
    out = 1
    for el in myList:
        out *= el
    return out
Run Code Online (Sandbox Code Playgroud)

当然,没有什么可以阻止你继续使用reduce(python 2) 或functools.reduce(python 3)