【问题标题】:Cool ways to use reduce()? [closed]使用 reduce() 的酷方法? [关闭]
【发布时间】:2016-03-13 11:54:42
【问题描述】:

我最近和一位朋友交谈,他说您可以使用 Python 的 reduce() 函数来计算列表的长度,甚至可以反转列表。我尝试用谷歌搜索实际代码,但找不到任何示例。

【问题讨论】:

  • 这些实际上是 reduce 的非常糟糕的用途,特别是因为获取长度和反转列表是已经内置的东西。阅读本文以获得更好的示例:stackoverflow.com/questions/15995/…
  • 这些是一些有趣的例子,谢谢你的链接,但他们没有谈论反转列表或获取长度。你也可以吗?
  • 你为什么要用reduce来做这个?如果您想获取列表的长度,请执行len(my_list)。如果要反转列表,请执行my_list.reverse()。在 SO 上搜索您的问题实际上会带来this。也许这将有助于为您提供更多信息
  • 在其他语言中,reduce 可能被称为fold。您可以找到使用该术语的示例。
  • 你真的不应该这样做,因为有更好的方法,但你可以使用reduce(lambda x, y: x+1, mylist, 0)获取长度,使用reduce(lambda x, y: [y] + x, mylist, [])获取反向列表。

标签: python


【解决方案1】:

你确实应该使用len()reversed(),但是如果你想使用reduce(),你可以这样做:

length = reduce(lambda x,y: x+1, mylist, 0)

reverse = reduce(lambda x,y: [y]+x, mylist, [])

对于长度,我们只需要在函数中跟踪运行总计。因此,我们需要从0 开始。这可以作为initial 参数传递给reduce()。现在,我们的函数将首先获取initialmylist 中的第一个元素。它只是忽略第二个参数(列表中的第一个元素)并返回x+1。现在x0,所以它返回1。接下来是 mylist 中的第二个元素。它返回第一个参数1 加上12。一直这样下去,直到到达mylist 的末尾,此时它有了总数。

对于倒车,非常相似。我们从x 开始,即[]。然后,我们想把第一个元素放在开头,所以我们返回[y] + x。下次调用它时,它将带有[y] + xmylist 中的第二个元素。然后它将第二个元素放在开头并返回,等等。

【讨论】:

    【解决方案2】:

    Reduce 在 Python 中可以是一个非常强大的函数,以及 maplambda 表达式。一个例子是计算从 1 到 100 的数字之和:

    >>> reduce(lambda x, y: x+y, range(1,101))
    5050
    

    您还可以使用它来查找列表的最大值:

    >>> f = lambda a,b: a if (a > b) else b
    >>> reduce(f, [47,11,42,102,13])
    102
    

    您甚至可以使用它来展平列表(已发现这非常有用):

    reduce(list.__add__, [[1, 2, 3], [4, 5], [6, 7, 8]], [])
    [1, 2, 3, 4, 5, 6, 7, 8]
    

    【讨论】:

    • 您知道您所有的三个示例都可以使用内置函数sum()max() 以更简单的方式归档?
    猜你喜欢
    • 2010-10-04
    • 2010-10-03
    • 2021-12-26
    • 2012-01-31
    • 2010-09-06
    • 2011-02-10
    • 1970-01-01
    • 2010-09-19
    • 2012-01-22
    相关资源
    最近更新 更多