在单行for循环语句中跳过元素

Inc*_*ito -2 python list-comprehension python-3.x

有没有一种方法可以在使用时跳过for循环的迭代

[x if cond else pass for x in seq]
Run Code Online (Sandbox Code Playgroud)

尝试时出现语法错误。

Output >>> File "<ipython-input-122-a943adcf1b68>", line 1
            test = [pass if isinstance(x, float) else x for x in test_list]
                       ^
      SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

您正在将条件表达式与循环过滤器混淆。若要过滤列表推导中的元素,请将其放在要过滤的循环if 之后for

[x for x in seq if cond]
Run Code Online (Sandbox Code Playgroud)

条件表达式(expr1 if cond else expr2)必须始终产生一个值,因为它是一个表达式。pass不是表达式,而是语句,只能单独使用。

对于您的具体示例,要在其中选择值不是浮点的元素,则要not在过滤器测试中使用:

[x for x in test_list if not isinstance(x, float)]
Run Code Online (Sandbox Code Playgroud)