是否可以在Python中的一行中执行此操作?
if <condition>:
myList.append('myString')
Run Code Online (Sandbox Code Playgroud)
我试过三元运算符:
myList.append('myString' if <condition>)
Run Code Online (Sandbox Code Playgroud)
但我的IDE(MyEclipse)不喜欢它,没有else
.
Cla*_*diu 89
是的,你可以这样做:
<condition> and myList.append('myString')
Run Code Online (Sandbox Code Playgroud)
如果<condition>
为假,则短路将启动,右侧不会被评估.如果<condition>
为true,则将评估右侧并附加元素.
我只想指出,做上述操作非常非pythonic,最好写这个,不管:
if <condition>: myList.append('myString')
Run Code Online (Sandbox Code Playgroud)
示范:
>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
Run Code Online (Sandbox Code Playgroud)
Emm*_*ler 32
语言不允许您使用语法的原因
variable = "something" if a_condition
Run Code Online (Sandbox Code Playgroud)
没有else
那个,在这种情况下a_condition == False
,variable
突然不知道.也许它可以默认None
,但Python要求所有变量赋值实际上都会导致显式赋值.这也适用于函数调用等情况,因为传递给函数的值的计算方式与赋值语句的RHS一样.
同样,所有return
s必须实际返回,即使它们是有条件return
的.例如:
return variable if a_condition
Run Code Online (Sandbox Code Playgroud)
不允许,但是
return variable if a_condition else None
Run Code Online (Sandbox Code Playgroud)
是允许的,因为第二个例子保证显式返回一些东西.
mgi*_*son 12
if <condition>: myList.append('myString')
Run Code Online (Sandbox Code Playgroud)
否则,没有.为什么需要把它放在一条线上?
注意,"三元运算符"是运算符.像任何操作员一样,它必须返回一些东西,那么如何在没有该else
条款的情况下拥有一个三元运算符呢?如果条件不真实,应该返回什么?
您基本上是在要求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
小智 5
如果我想根据条件向列表添加可选元素,i\xe2\x80\x99d 就这样做。
\nnums = [\n 1,\n 2,\n 3 if <condition> else None,\n 4,\n ]\n\n# nums now contains values of `None`, so we delete all occurrences of `None`\nnums.remove(None)\n
Run Code Online (Sandbox Code Playgroud)\n如果不满足条件,这只是用 None 替换该值,然后,它只是重新定义没有 None 值的列表。\n这样,如果满足条件,它们会保留索引
\n 归档时间: |
|
查看次数: |
46452 次 |
最近记录: |