root root - 2 months ago 10
Python Question

Python lambda with if but without else

I was writing some lambda functions and couldn't figure this out. Is there a way to have something like

lambda x: x if (x<3)
in python? As
lambda a,b: a if (a > b) else b
works ok. So far
lambda x: x < 3 and x or None
seems to be the closest i have found.

Answer

A lambda, like any function, must have a return value.

lambda x: x if (x<3) does not work because it does not specify what to return if not x<3. By default functions return None, so you could do

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

But perhaps what you are looking for is a list comprehension with an if condition. For example:

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

In [22]: [x for x in data if x < 3]
Out[22]: [1, 2, -1]