我最近和一位朋友谈过,他说你可以使用Python的reduce()函数来计算列表的长度甚至反转列表。我试图谷歌实际的代码,但我找不到任何例子。
答案 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
。现在,我们的函数将首先获取initial
和mylist
中的第一个元素。它只是忽略第二个参数(列表中的第一个元素)并返回x+1
。目前x
为0
,因此返回1
。接下来,mylist
中的第二个元素被赋予它。它返回第一个参数1
加1
:2
。它继续这样,直到它到达mylist
的末尾,此时它具有总数。
对于倒车,它非常相似。我们从x
[]
开始。然后,我们想把第一个元素放在开头,所以我们返回[y] + x
。下次调用它时,它将与[y] + x
和mylist
中的第二个元素一起使用。然后它将第二个元素放在开头并返回,等等。
答案 1 :(得分:0)
Reduce
可以是Python中非常强大的函数,以及map
和lambda
表达式。一个例子是计算从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]