Python lambda与if但没有其他

roo*_*oot 34 python lambda inline-if

我正在编写一些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似乎是我发现的最接近的.

unu*_*tbu 56

与任何函数一样,lambda必须具有返回值.

lambda x: x if (x<3)不起作用,因为它没有指定返回的内容,如果没有x<3.默认情况下函数返回None,所以你可以这样做

lambda x: x if (x<3) else None
Run Code Online (Sandbox Code Playgroud)

但也许你正在寻找的是具有if条件的列表理解.例如:

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

In [22]: [x for x in data if x < 3]
Out[22]: [1, 2, -1]
Run Code Online (Sandbox Code Playgroud)

  • 这是一个合理的假设,因为函数默认返回None.要记住的重要一点是`lambda x:`后面的内容必须是*表达式*,而不是语句. (4认同)
  • @root我有时会发现想起一个`lambda`好像它实际上写成`def lambda(x,y):return ... (3认同)

im_*_*arn 7

我发现这filter正是我在 python 2 中寻找的内容:

>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]
Run Code Online (Sandbox Code Playgroud)

2.x3.x的实现不同:2.x 提供了一个列表,3.x 提供了一个迭代器。在 3.x 中使用列表理解可能会更干净:

>>> data = [1, 2, 5, 10, -1]
>>> [filter(lambda x: x < 3, data)]
[1, 2, -1]
Run Code Online (Sandbox Code Playgroud)


use*_*342 6

怎么了lambda x: x if x < 3 else None