9

これは私のコードです:

filter(lambda n,r: not n%r,range(10,20))

エラーが発生します:

TypeError: <lambda>() takes exactly 2 arguments (1 given)

それで、私は試しました:

foo=lambda n,r:not n%r

これはうまくいきました。だから私はこれがうまくいくと思った:

bar=filter(foo,range(10,20))

しかし、再び:

TypeError: <lambda>() takes exactly 2 arguments (1 given)

マップでも同様のことが起こります。しかし、削減はうまくいきます。私は何を間違っていますか?フィルターまたはマップを使用するために必要な重要なものが不足していますか?

4

5 に答える 5

6

なぜ2つの引数を使用するのですか? 単一の引数のみを持つ関数が必要です。たとえば、次のようになりますfilter()map()

filter(lambda x: x >= 2, [1, 2, 3])
>>> [2, 3]

数値の約数を見つけるには (ラムダで置き換えることもできます):

def factors(x):
    return [n for n in range(1, x + 1) if x % n == 0]

factors(20)
>>> [1, 2, 4, 5, 10, 20]
于 2012-10-05T18:14:25.347 に答える
5

キーと値のセットに対してマップまたはフィルターを実行する場合は、次のように (k,v) を括弧で囲みます。

  .filter(lambda (k,v): k*2 + v)
于 2015-06-15T14:31:18.793 に答える
4

filterPython では 1 つの引数しかとらないためです。したがって、フィルターで使用する場合は、引数を 1 つだけ取るラムダ/関数を定義する必要があります。

于 2012-10-05T18:13:52.407 に答える
0

ラムダ関数は 2 つの引数nとを受け取りますrfilter1 つの引数を取りTrue、アイテムを保持する必要があるときに戻る関数を使用して呼び出す必要があります。おそらく、ラムダ関数を定義するrn、ラムダ関数の外に出して、それをクロージャに取り込むつもりだったのでしょう。

于 2012-10-05T18:14:26.773 に答える