Python lambda与if但没有其他

时间:2012-10-03 13:00:18

标签: python lambda inline-if

我正在编写一些lambda函数,但无法解决这个问题。有没有办法在python中使用lambda x: x if (x<3)之类的东西?由于lambda a,b: a if (a > b) else b正常。到目前为止lambda x: x < 3 and x or None似乎是我找到的最接近的。

4 个答案:

答案 0 :(得分:53)

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]

答案 1 :(得分:6)

lambda x: x if x < 3 else None出了什么问题?

答案 2 :(得分:4)

很抱歉让僵尸复苏。

我正在寻找同一问题的答案,我发现&#34;过滤&#34;提供了我正在寻找的东西:

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

答案 3 :(得分:2)

您可以随时尝试调用&#39;过滤&#39;用于条件检查。从根本上说,map()必须处理每次出现的迭代,因此无法进行选择。但过滤器可能有助于缩小选择范围。例如,我创建一个从1到19的列表,但是想创建一个仅偶数的 方块。

x = list(range(1,20))

y = tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))

print (y)