私はラムダ関数でループ試みたが、私のコードは次のとおりです。ラムダでループすることはできますか?
zxm=lambda k:[k+x for x in range(k)]
print(zxm(5))
と私は入力を与えたとき、私が得た出力は次のようになります。
[5,6,7,8,9]
私の予想される出力は、しかし、の合計ですすべての5つの数字と私が欲しい:
35
ラムダをどのようにループできますか?また、1つに再帰のチャンスがありますか?
私はラムダ関数でループ試みたが、私のコードは次のとおりです。ラムダでループすることはできますか?
zxm=lambda k:[k+x for x in range(k)]
print(zxm(5))
と私は入力を与えたとき、私が得た出力は次のようになります。
[5,6,7,8,9]
私の予想される出力は、しかし、の合計ですすべての5つの数字と私が欲しい:
35
ラムダをどのようにループできますか?また、1つに再帰のチャンスがありますか?
これはループ自体ではなく、リストの理解です。例えば、sum
を使用して合計を得ることができます。 for
のような文がlambda
内部で禁止されていることを
In [7]: zxm = lambda k: sum(k+x for x in range(k))
In [8]: zxm(5)
Out[8]: 35
は注意。式のみが許可されているので、リスト内包表記を使用することはできますが、従来のfor
ループを記述することはできません。
まず、Pythonにsum
メソッドがあります。 sum(zxm(5))
を実行するだけで済みます。再帰ラムダは存在します(Y Combinator参照)。これはPythonでも可能ですが(Can a lambda function call itself recursively in Python?参照)、実用性は特に強くありません。あなたがここで行ったように、Lambdaは(リストの上に)ループすることができます。問題は、zxm
がラムダだが、それが定義されているということではない。合計をzxm
に取得するには、zxm=lambda k: sum([k+x for x in range(k)])
と定義します。
この解決策は、(特にリストが大きい場合)より効率的なリストの理解( ']')ではなく、生成者の理解( '()')を使用したことに注意してください。詳細:http://stackoverflow.com/questions/47789/generator-expressions-vs-list-comprehension –