是否可以在Python的一行中执行此操作?
if <condition>:
myList.append('myString')
我尝试过三元运算符:
myList.append('myString' if <condition>)
但我的IDE(MyEclipse)不喜欢它,没有else
。
答案 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 == False
,variable
突然不知道的情况。也许它可以默认为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值。 这样,如果条件满足,他们将保留索引