50

私はいくつかのラムダ関数を書いていましたが、これを理解できませんでした。lambda x: x if (x<3)Pythonのようなものを持つ方法はありますか? 正常lambda a,b: a if (a > b) else bに動作します。これまでのところlambda x: x < 3 and x or None、私が見つけた中で最も近いようです。

4

4 に答える 4

81

ラムダは、他の関数と同様に、戻り値を持っている必要があります。

lambda x: x if (x<3)そうでない場合に何を返すかを指定していないため、機能しませんx<3。デフォルトでは、関数はを返すNoneので、次のことができます

lambda x: x if (x<3) else None

しかし、おそらくあなたが探しているのは、if条件付きのリスト内包です。例えば:

In [21]: data = [1, 2, 5, 10, -1]

In [22]: [x for x in data if x < 3]
Out[22]: [1, 2, -1]
于 2012-10-03T13:05:54.687 に答える
7

filterPython 2で探していたものを正確に提供することがわかりました:

>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]

2.x3.xでは実装が異なります。2.x はリストを提供しますが、3.x は反復子を提供します。リスト内包表記を使用すると、3.x での使用がよりクリーンになる可能性があります。

>>> data = [1, 2, 5, 10, -1]
>>> [filter(lambda x: x < 3, data)]
[1, 2, -1]
于 2017-01-10T19:17:08.627 に答える
5

何が問題なのlambda x: x if x < 3 else Noneですか?

于 2012-10-03T13:04:48.093 に答える