我正在编写一些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
似乎是我找到的最接近的。
答案 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)