没有其他的Python三元运算符

时间:2012-08-30 14:56:43

标签: python ternary

是否可以在Python的一行中执行此操作?

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

我尝试过三元运算符:

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

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

7 个答案:

答案 0 :(得分:79)

是的,你可以这样做:

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

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

我只想指出,做上述内容非常非pythonic,无论如何写它可能是最好的:

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

演示:

>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']

答案 1 :(得分:30)

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

variable = "something" if a_condition
没有else

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

同样,所有return必须实际返回,即使它们是条件return。例如:

return variable if a_condition

是不允许的,但是

return variable if a_condition else None
允许

,因为第二个示例保证显式返回。

答案 2 :(得分:12)

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

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

请注意,“三元运算符”是运算符。像任何运算符一样,必须返回,所以如何在没有else子句的情况下拥有三元运算符?如果条件不真实,它应该返回什么?

答案 3 :(得分:5)

您基本上是在寻求do_thing() if <condition> else pass构造(如果运行,它将抛出SyntaxError)。正如我在研究期间发现的similar question 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

答案 4 :(得分:3)

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

答案 5 :(得分:0)

您可以执行以下操作:

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

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

答案 6 :(得分:0)

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

nums = [
        1,
        2,
        3 if <condition> else None,
        4,
       ]
nums = [i for i in nums if i is not None]

如果不满足条件,这只会将值替换为None,然后稍后,它将重新定义列表,而不会显示None值。 这样,如果条件满足,他们将保留索引

相关问题