web-dev-qa-db-ja.com

Python lambda with if with but else else

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

33
root

ラムダは、他の関数と同様に、戻り値が必要です。

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]
54
unutbu

どうしたの lambda x: x if x < 3 else None

6
user4815162342

ゾンビを蘇らせてすみません。

私は同じ質問に対する答えを探していましたが、「フィルター」がまさに私が探していたものを提供することがわかりました。

>>> 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

4
linuxraptor

条件付きチェックのために「フィルター」をいつでも呼び出そうとすることができます。基本的に、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)
2
Tirtha