很酷的方式使用reduce()?

时间:2016-03-13 03:09:36

标签: python

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

2 个答案:

答案 0 :(得分:1)

您确实应该使用len()reversed(),但如果您想使用reduce()可以执行此操作:

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

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

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

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

答案 1 :(得分:0)

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]