带if但不带else的Python lambda

带if但不带else的Python lambda,python,lambda,inline-if,Python,Lambda,Inline If,我正在编写一些lambda函数,但无法理解这一点。如果(xb)else b工作正常,是否有办法使类似于lambda x:x的东西工作正常。到目前为止,lambda x:x>>滤波器(λx:x数据=[1,2,5,10,-1] >>>[过滤器(λx:xx:x

我正在编写一些lambda函数,但无法理解这一点。如果(xb)else b工作正常,是否有办法使类似于
lambda x:x的东西工作正常。到目前为止,
lambda x:x<3和x或None
似乎是我找到的最接近的值。

如果x<3其他无
,lambda x:x有什么问题?

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


lambda x:x if(x我发现
filter
提供了我在python 2中想要的东西:

>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]
>数据=[1,2,5,10,-1]
>>>滤波器(λx:x<3,数据)
[1, 2, -1]
和中的实现不同:虽然2.x提供了一个列表,但3.x提供了一个迭代器

>>> data = [1, 2, 5, 10, -1]
>>> [filter(lambda x: x < 3, data)]
[1, 2, -1]
>数据=[1,2,5,10,-1]
>>>[过滤器(λx:x<3,数据)]
[1, 2, -1]

您始终可以尝试调用“过滤器”进行条件检查。基本上,
map()
必须处理每次出现的iterables,因此它无法进行拾取和选择。但筛选器可能有助于缩小选择范围。例如,我创建了一个从1到19的列表,但希望创建一个只有偶数的平方的元组

x = list(range(1,20))

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

print (y)

@ubuntu--谢谢。我不知道为什么我假设它不指定就应该返回None。这是一个合理的假设,因为函数默认不返回None。需要记住的重要一点是,后面的
lambda x:
必须是一个表达式,而不是一个语句。@root我有时觉得把
lambda
当作你的名字很方便gh它实际上写为
def lambda(x,y):return…
我的理解是列表理解在这个场景中更合适。问题没有提到迭代,所以我不确定你的意思。你能详细说明吗?x的值为“无”万一else@Mardini不,但是在这种情况下,
lambda
将返回None。它必须返回一些东西。@user4815162342这正是我的意思,lambda将返回“None”在2和3中的实现都不同。在2中,它返回一个列表,在3中,它返回一个迭代器,要将其转换为列表,您需要将其转换为:
list(filter(lambda,data))
。无论哪种方式,通常认为使用中的
if
子句阅读理解会更容易。添加了您对python 3的输入,谢谢!我想风格上的变化有点与个人偏好有关。由于使用函数式编程语言,Lambda对我来说有点自然。当我阅读它们时,类似
的内容>x:x<3
与数据中的x类似,如果x[…]
的话,那么x:x<3的重复性会更低/更优雅。欢迎!但是你的Python3实现是不正确的。你在列表中得到了一个筛选器对象。你需要转换它:
list(filter(lambda,data))
或者使用splat:
[*filter(lambda x:x<3,data)]
。它也不是一个列表。
>>> data = [1, 2, 5, 10, -1]
>>> [filter(lambda x: x < 3, data)]
[1, 2, -1]
x = list(range(1,20))

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

print (y)