0

各要素が文字列であるセットがある場合、これらの文字列の長さの合計である整数にセットを減らすにはどうすればよいですか?

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

ラムダ関数を使用してreduceを呼び出すと、10(2 + 5 + 3)が返されます。

いくつかのラムダでそれを行うことができると思いますが、よりクリーンな方法が必要です。

4

4 に答える 4

11

慣用的な解決策は、ジェネレータ式を使用することです。

sum(len(s) for s in setA)

ジェネレータ式とリスト内包表記は、 andラムダよりも優先されるべきです。後者は利用可能ですが、「非pythonic」と見なされます。map()reduce()

于 2013-02-13T21:35:31.543 に答える
4

どうぞ:

sum(map(len, setA))
于 2013-02-13T21:36:09.117 に答える
3

lambdaとを使用してこれを本当に実行したい場合はreduce、次のことができます。

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

reduceしかし、なぜ単にを使用するのではなく0から始めたいのかわかりません。sumその場合、ラムダはちょうどlambda y: len(y)、これはちょうどと同等ですlen

于 2013-02-13T21:37:56.537 に答える
3
In [4]: reduce(lambda x, y: x+y , map(lambda x: len(x), setA))
Out[4]: 10
于 2013-02-13T21:36:46.150 に答える