是否可以在 Python 中的一行上做到这一点?
if <condition>:
myList.append('myString')
我试过三元运算符:
myList.append('myString' if <condition>)
但我的 IDE ( MyEclipse ) 不喜欢它,没有else
.
是的,你可以这样做:
<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']
语言不允许您使用语法的原因
variable = "something" if a_condition
没有else
就是,在 的情况下a_condition == False
,variable
突然不知道了。也许它可以默认为None
,但 Python 要求所有变量赋值实际上都会导致显式赋值。这也适用于函数调用等情况,因为传递给函数的值会像赋值语句的RHS一样被评估。
类似地,所有return
s 都必须实际返回,即使它们是有条件return
的 s。例如:
return variable if a_condition
不允许,但是
return variable if a_condition else None
是允许的,因为第二个示例保证显式返回某些内容。
if <condition>: myList.append('myString')
否则,没有。为什么需要把它放在一条线上?
请注意,“三元运算符”是operator。像任何运算符一样,它必须返回 somethingelse
,那么没有子句怎么能有一个三元运算符呢?如果条件不是真实的,它应该返回什么?
您基本上是在要求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
myList.extend(['myString'] if condition else [])
也可以,尽管它比其他解决方案更有效。
您可以执行以下操作。请注意,None
在任何时候都不会附加到myList
.
myList.append('myString') if <condition> else None
此外,Python 应该接受下面的单行。
if <condition>: myList.append('myString')
如果我想根据条件将可选元素添加到列表中,我会这样做。
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 值的列表。这样,如果满足条件,它们就会保留索引