是否可以在Python中一行执行此操作?
if <condition>:
myList.append('myString')
我已经尝试过三元运算符:
myList.append('myString' if <condition>)
但是我的IDE(MyEclipse)不喜欢它,没有一个else
。
Answers:
是的,您可以这样做:
<condition> and myList.append('myString')
如果<condition>
为假,则短路将开始,并且右侧将不被评估。如果<condition>
为true,则将评估右侧并添加元素。
我只是指出,执行上述操作是完全非Python的,无论如何,最好编写此代码:
if <condition>: myList.append('myString')
示范:
>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
E701 multiple statements on one line
同样,非pythonic ...;)
x = object.get('attribute')
在这种情况下将是“正确的”方法
语言不允许您使用语法的原因
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
之所以允许,是因为第二个示例保证可以显式返回某些内容。
variable=None
完全合法。:D
continue if i == 0
在for循环中。
else pass?
else pass
不起作用,因为三元表达式应返回可以传递给的值return
。pass
不是有效值return
。
if a_condition: variable = "something"
和if a_condition: return variable
是合法的。因此,它本质上是python的任意语法选择。
您基本上是在要求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.append('myString') if <condition> else False
要么
myList.append('myString') if <condition> else 0
myList.append('myString') if True else _
但是如果您不分配任何东西,那就没关系了。我担心这个人尝试使用类似的逻辑进行列表理解。
如果我想根据条件将可选元素添加到列表中,我只会这样做。
nums = [
1,
2,
3 if <condition> else None,
4,
]
nums = [i for i in nums if i is not None]
如果不满足条件,这只会将值替换为None,然后稍后,它将重新定义没有None值的列表。这样,如果满足条件,他们将保留索引