私はいくつかのラムダ関数を書いていましたが、これを理解できませんでした。 Pythonにlambda x: x if (x<3)
のようなものを持っている方法はありますか? lambda a,b: a if (a > b) else b
は問題なく動作します。これまでのところ lambda x: x < 3 and x or None
は私が見つけた最も近いようです。
ラムダは、他の関数と同様に、戻り値が必要です。
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]
どうしたの lambda x: x if x < 3 else None
?
ゾンビを蘇らせてすみません。
私は同じ質問に対する答えを探していましたが、「フィルター」がまさに私が探していたものを提供することがわかりました。
>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]
実装は2.xと3.xの両方で同じです: https://docs.python.org/2/library/functions.html#filterhttps:// docs .python.org/3/library/functions.html#filter
条件付きチェックのために「フィルター」をいつでも呼び出そうとすることができます。基本的に、map()
はイテレート可能オブジェクトのすべてのオカレンスを処理する必要があるため、選択することはできません。ただし、フィルターを使用すると、選択肢を絞り込むことができます。たとえば、1〜19のリストを作成しますが、タプルof偶数のみの正方形を作成します。
x = list(range(1,20))
y = Tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))
print (y)