Python lambda 有 if 但没有 else
题
我正在编写一些 lambda 函数,但无法弄清楚这一点。有没有办法拥有类似的东西 lambda x: x if (x<3)
在Python中?作为 lambda a,b: a if (a > b) else b
工作正常。迄今为止 lambda x: x < 3 and x or None
似乎是我发现的最接近的。
解决方案
与任何函数一样,lambda 必须有一个返回值。
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#filter https://docs.python.org/3/library/functions.html#filter
您始终可以尝试调用“过滤器”进行条件检查。从根本上来说, map()
必须对每次出现的迭代进行处理,因此它无法进行挑选。但过滤可能有助于缩小选择范围。例如,我创建一个从 1 到 19 的列表,但想创建一个元组 的 仅由偶数组成的平方。
x = list(range(1,20))
y = tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))
print (y)
不隶属于 StackOverflow