【发布时间】:2017-10-19 15:11:21
【问题描述】:
在 Python3 中,我正在寻找一种方法来计算 一行 一个对两个两个元素调用的 lambda 函数。假设我要计算整数列表的LCM,这可以在one line in Python2 中完成:
print reduce(lambda a,b: a * b // gcd(a, b), mylist)
是否可以在一行 Python3 中做同样的事情(隐含,没有functools.reduce)?
在 Python3 中,我知道 filter、map 和 reduce 消失了。我觉得我不再需要 filter 和 map 了,因为它们可以用 Python3 以更短、更清晰的方式编写,但我想我也可以找到一个很好的替代 reduce,除非我没有发现任何。我have 看过many 文章that 建议to 使用functools.reduce 或“write out the accumulation loop explicitly”,但我想在不导入functools 的情况下这样做。
如果它更容易,我应该提一下我使用了associative 和commutative 的函数。例如,使用列表[1,2,3,4] 上的函数f,如果它计算结果会很好:
f(1,f(2,f(3,4)))f(f(1,2),f(3,4))f(f(3,f(1,4)),2)- 或任何其他订单
【问题讨论】:
-
为什么要一行行呢?鉴于此,您为什么不想使用
functools.reduce?这两个要求似乎都是武断的,没有实际用途 -
添加到 Chris 的评论中,
reduce已从全局命名空间移动到functools,这正是 因为 它主要用于简洁(有人可能会说,晦涩难懂)的-衬里。 -
你不使用
functools.reduce的理由对我来说没有多大意义...... -
filter和map仍然在 Python 3 中,但最好使用推导式。如前所述,reduce在functools中。在此处查看 BDFL 的帖子artima.com/weblogs/viewpost.jsp?thread=98196
标签: python python-3.x python-2.x reduce