Python中的reduce函数

0 投票
7 回答
4617 浏览
提问于 2025-04-17 00:03

我使用了reduce函数来把一个列表里的所有元素相乘,代码如下。

l = [1,2,3,4,5]
reduce(lambda x,y:x*y,l) #returns 120

现在,假设我有一个列表,l = [1,'apple',2,'apple','apple'],我想统计一下“apple”这个词在列表中出现了多少次。请问可以用reduce来实现吗?

我知道可以用l.count('apple')来计算,但我想知道用reduce的方法是否可行。

7 个回答

2

在编程中,有时候我们会遇到一些问题,特别是在使用特定的工具或库时。比如,有人可能在使用某个库的时候,发现它的某个功能没有按照预期工作。这种情况下,通常需要检查代码,看看是不是哪里出错了。

有些人会在网上寻求帮助,比如在StackOverflow上提问。他们会描述自己的问题,提供相关的代码片段,并说明他们希望实现的目标。这样,其他人就能更好地理解他们的困惑,并给出建议或解决方案。

总之,遇到问题时,清楚地描述情况和提供代码是非常重要的,这样才能更快地找到解决办法。

>>> l
[1, 'apple', 2, 'apple', 'apple']
>>> reduce(lambda x, y: x + (1 if y == 'apple' else 0), l, 0)
3
2
>>> l = [1,'apple',2,'apple','apple']
>>> reduce(lambda s, i: s+1 if i == "apple" else s, l, 0)
3

你可以把 s+1 if i == "apple" else s 这部分简化成 s + (i == "apple"),但是我觉得把布尔值转换成整数的方式有点难懂。不过用 reduce 来做这个事情本身就挺复杂的 :).

6

是的,确实可以这样做:

reduce(lambda x,y: x + (y == 'apple'), l, 0)

不过正如你自己提到的,这里其实没有必要使用 reduce。这样做可能会比其他计数的方法慢,而且它的目的也不太明显。

撰写回答