gpt4 book ai didi

python - Python 中带有条件的 lambda

转载 作者:行者123 更新时间:2023-11-30 22:37:17 25 4
gpt4 key购买 nike

有什么方法可以通过更好的解决方案来改进代码吗?

假设列表中nums = [1, 2, 3, 4, 5, 6],想要使用lambda进行简单计算num%2 == 0 仅如下所示:

print map(lambda n:n**2, filter(lambda n: n%2!=0, nums))

只是想知道是否有办法只使用一个 lambda 表达式?

最佳答案

如果您确实想要使用lambda,您可以使用一个 lambda 来实现,该 lambda 根据输入的奇数发出平方值或 0,使用三元组表达式(但您仍然需要使用 None 进行过滤,以便仅保留非零数字)

nums = [1, 2, 3, 4, 5, 6]
result = list(filter(None,map(lambda n:n**2 if n%2 else 0,nums)))

结果:

[1, 9, 25]

请注意,仅 python 3 需要 list 转换。

当然,所有这些filtermap,...链接都会使lambda效率低下/没那么有用。您最好使用简单的列表理解。

result = [n**2 for n in nums if n%2]
仅当您有方便的函数(或内置函数)时才需要

map (例如 map(str,my_list) )。所有这些链式调用最终的性能可能会低于简单的列表理解。

这里有更详细的解释:https://docs.python.org/2/howto/functional.html#small-functions-and-the-lambda-expression

Which alternative is preferable? That’s a style question; my usual course is to avoid using lambda. One reason for my preference is that lambda is quite limited in the functions it can define. The result has to be computable as a single expression, which means you can’t have multiway if... elif... else comparisons or try... except statements. If you try to do too much in a lambda statement, you’ll end up with an overly complicated expression that’s hard to read.

关于python - Python 中带有条件的 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43921104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com