0

给定一个集合,其中每个元素都是一个字符串,如何将集合缩减为一个整数,即这些字符串的长度之和?

setA = ("hi", "hello", "bye")
reduce(lambda .... for word in setA)

使用一些 lambda 函数调用 reduce 应该返回 10 (2 + 5 + 3)。

我想我可以用几个 lambdas 来做到这一点,但必须有一种更清洁的方法。

4

4 回答 4

11

惯用的解决方案是使用生成器表达式

sum(len(s) for s in setA)

生成器表达式和列表推导应该优先map()andreduce()和 lambdas。后者是可用的,但被认为是“unpythonic”。

于 2013-02-13T21:35:31.543 回答
4

干得好:

sum(map(len, setA))
于 2013-02-13T21:36:09.117 回答
3
In [4]: reduce(lambda x, y: x+y , map(lambda x: len(x), setA))
Out[4]: 10
于 2013-02-13T21:36:46.150 回答
3

如果你真的想用lambdaand做到这一点reduce,你可以:

reduce(lambda x, y: x + len(y), s, 0)

但我不确定你为什么reduce要从 0 开始而不是仅仅使用sum,在这种情况下你的 lambda 是 just lambda y: len(y),相当于 just len

于 2013-02-13T21:37:56.537 回答