2016-12-29 6 views
1

私はラムダ関数でループ試みたが、私のコードは次のとおりです。ラムダでループすることはできますか?

zxm=lambda k:[k+x for x in range(k)] 
print(zxm(5)) 

と私は入力を与えたとき、私が得た出力は次のようになります。

[5,6,7,8,9] 

私の予想される出力は、しかし、の合計ですすべての5つの数字と私が欲しい:

35 

ラムダをどのようにループできますか?また、1つに再帰のチャンスがありますか?

答えて

7

これはループ自体ではなく、リストの理解です。例えば、sumを使用して合計を得ることができます。 forのような文がlambda内部で禁止されていることを

In [7]: zxm = lambda k: sum(k+x for x in range(k)) 

In [8]: zxm(5) 
Out[8]: 35 

は注意。式のみが許可されているので、リスト内包表記を使用することはできますが、従来のforループを記述することはできません。

+1

この解決策は、(特にリストが大きい場合)より効率的なリストの理解( ']')ではなく、生成者の理解( '()')を使用したことに注意してください。詳細:http://stackoverflow.com/questions/47789/generator-expressions-vs-list-comprehension –

1

まず、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)])と定義します。

関連する問題