【发布时间】:2016-07-18 08:30:01
【问题描述】:
你应该如何在 lambda 函数中编写嵌套的 if 语句?
我正在尝试使用 lambda 的过滤功能:
final_list = filter(lambda x: False if isinstance x(float) or isinstance(x, int) if x<5, another_list)
我想做的是:
- 检查值是浮点数还是整数
- 如果是 float 或 int,检查是否
- 如果 False,因此
filter将移动到列表的下一个元素。
我的错误表明我的嵌套 if x < 5 语法无效。
【问题讨论】:
-
那么如果值不是 float 或 int,或者是 5 或更大,应该返回什么?
-
在这种情况下,我将只使用常规 (
def) 函数,使其更易于阅读、测试和理解。 -
@TigerHawk:这实际上不需要条件表达式。
-
你甚至不需要另一个
if:Python 有短路功能。lambda x: not (isinstance x(float) or isinstance(x, int) and x<5)。如果你有比这更复杂的东西,它不能只返回它自己的真值,请使用三元组。 -
@MartijnPieters,对不起。也许这会解决问题:1)如果不是浮点数或整数,则打印值,2)如果浮点数或整数大于 5,则打印值。我想我误解了过滤器的基本工作原理,并试图编写它,以便它会强制删除不符合标准的值,即使它会自动执行。您在下面回答的方式帮助我清除了错误,以便它现在可以工作。
标签: python if-statement lambda