Python中行内for循环中的if else如何继续执行

6
我一直无法找到在for循环中如何使用continue/pass的技巧,你有什么想法吗?请不要提供显式的循环解决方案,应该将所有内容都放在一行中。
我已经尝试过使用continue、pass和only if语句来测试代码...
list_num=[1,3]
[("Hola"  if i == 1 else continue)  for i in list_num]

我的尝试的输出:

[("Hola"  if i == 1 else continue)  for i in list_num]
                                    ^
SyntaxError: invalid syntax


File "<stdin>", line 1
    [("Hola"  if i == 1 else pass)  for i in list_num]
                                ^
SyntaxError: invalid syntax



File "<stdin>", line 1
    [(if i == 1: "Hola")  for i in list_num]
   ^
SyntaxError: invalid syntax

你正在使用三元操作符返回'continue'。A if B else C 是一个三元运算符,如果B为真,则评估B并返回A,否则返回C。 - Carl Shiles
在条件表达式中,你不能使用语句 - vaultah
4个回答

16

您可以替换列表中的每个项目:

>>> ['hola' if i == 1 else '' for i in list_num]
['hola', '']

或在满足条件时替换:

>>> ['hola' for i in list_num if i == 1]
['hola']

1
同样是替换,我想提供另一种选择:["hola" * (i==1) for i in list_num] - user7851115
太棒了!感谢你的回答,第二个正是我想要的。 - chuseuiti
这就是答案,谢谢 @Meyer - AZ123

3
重要的是要记住三元运算符仍然是一个运算符,因此需要返回一个表达式。所以不能使用像continue或pass这样的语句。它们不是表达式。
但是,在列表推导式中使用语句完全没有必要。实际上,你甚至不需要三元运算符。从列表中过滤项目是一个常见的习惯用法,因此Python提供了特殊的语法来通过允许在推导式中使用单个if语句来进行过滤:
>>> list_num = [1, 3]
>>> ["Hola" for i in list_num if i == 1]
['Hola']
>>>

1
如果你想在列表推导式中添加保护语句,它应该放在最后。另外,由于它是一个保护语句,所以没有else子句。
list_num=[1,3]
["Hola" for i in list_num if i == 1]

0
你应该在列表推导式中使用过滤功能。考虑以下示例:
['Hola' for i in list_num if i == 1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接