50

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

4

4 回答 4

81

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

lambda x: x if (x<3)不起作用,因为它没有指定如果没有返回什么x<3。默认情况下函数 return 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]
于 2012-10-03T13:05:54.687 回答
7

我发现这filter正是我在 python 2 中寻找的东西:

>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]

2.x3.x的实现不同:2.x 提供列表,3.x 提供迭代器。在 3.x 中使用列表推导可能会更简洁:

>>> data = [1, 2, 5, 10, -1]
>>> [filter(lambda x: x < 3, data)]
[1, 2, -1]
于 2017-01-10T19:17:08.627 回答
5

有什么问题lambda x: x if x < 3 else None

于 2012-10-03T13:04:48.093 回答
2

您始终可以尝试调用“过滤器”进行条件检查。从根本上说,map()必须处理每次出现的迭代,所以它不能挑选。但过滤器可能有助于缩小选择范围。例如,我创建了一个从 1 到 19 的列表,但想创建一个只有偶数平方的元组。

x = list(range(1,20))

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

print (y)
于 2017-04-07T23:51:53.563 回答