94

是否可以在 Python 中的一行上做到这一点?

if <condition>:
    myList.append('myString')

我试过三元运算符:

myList.append('myString' if <condition>)

但我的 IDE ( MyEclipse ) 不喜欢它,没有else.

4

7 回答 7

137

是的,你可以这样做:

<condition> and myList.append('myString')

如果<condition>为假,则将启动短路并且不会评估右侧。如果<condition>为真,则将评估右侧并附加元素。

我只想指出,执行上述操作是非常非 Python 的,最好写这个,不管:

if <condition>: myList.append('myString')

示范:

>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
于 2012-08-30T15:05:19.817 回答
51

语言不允许您使用语法的原因

variable = "something" if a_condition

没有else就是,在 的情况下a_condition == Falsevariable突然不知道了。也许它可以默认为None,但 Python 要求所有变量赋值实际上都会导致显式赋值。这也适用于函数调用等情况,因为传递给函数的值会像赋值语句的RHS一样被评估。

类似地,所有returns 都必须实际返回,即使它们是有条件return的 s。例如:

return variable if a_condition

不允许,但是

return variable if a_condition else None

是允许的,因为第二个示例保证显式返回某些内容。

于 2012-08-30T14:59:11.573 回答
13
if <condition>: myList.append('myString')

否则,没有。为什么需要把它放在一条线上?

请注意,“三元运算符”是operator。像任何运算符一样,它必须返回 somethingelse ,那么没有子句怎么能有一个三元运算符呢?如果条件不是真实的,它应该返回什么?

于 2012-08-30T14:57:47.317 回答
11

您基本上是在要求do_thing() if <condition> else pass构造(如果运行,它将抛出SyntaxError)。正如我在研究(有点)类似问题 do_thing() if condition else None的过程中发现的那样,你可以得到尽可能接近的结果(这只是另一种方法<condition> and do_thing())。所以,总结这个想法和其他答案,这里是你的选择:

  • if <condition>: myList.append('myString')- 似乎是最不“hacky”(因此是首选)的方式
  • <condition> and myList.append('myString')
  • myList.append('myString') if <condition> else None
于 2018-07-10T09:30:18.443 回答
3

myList.extend(['myString'] if condition else [])也可以,尽管它比其他解决方案更有效。

于 2012-08-30T15:21:42.473 回答
1

您可以执行以下操作。请注意,None在任何时候都不会附加到myList.

myList.append('myString') if <condition> else None

此外,Python 应该接受下面的单行。

if <condition>: myList.append('myString')
于 2018-11-17T04:54:10.460 回答
1

如果我想根据条件将可选元素添加到列表中,我会这样做。

nums = [
        1,
        2,
        3 if <condition> else None,
        4,
       ]

# nums now contains values of `None`, so we delete all occurrences of `None`
nums.remove(None)

如果不满足条件,这只是用 None 替换值,然后,它只是重新定义没有 None 值的列表。这样,如果满足条件,它们就会保留索引

于 2020-11-03T21:50:34.530 回答