【发布时间】:2018-08-17 18:03:06
【问题描述】:
在定义项目列表(即不是实际的列表推导)时,为什么需要一个 else 语句来伴随任何 if 语句?例如,使用 Python 3.7 说我们有一些可能为真或假的条件,如果条件为真,我们希望在列表中包含一个元素,如果条件为假,则不包含它。
condition = False
lyst = ['a', 'b', 'c' if condition]
我希望它将 ['a', 'b'] 分配给 lyst,但它会引发语法错误。如果我们包含 else 语句,它会起作用:
lyst = ['a', 'b', 'c' if condition else 'd']
但现在结果是lyst = ['a', 'b', 'd']
在this question 中,用户 Plankton 的回答进一步指出您不能在 else 语句中使用“通过”。我的问题是为什么需要 else 语句?是否保证创建的列表具有预期的项目数量?如果是这样,我觉得这不是很pythonic。
这特别奇怪,因为您可以在实际列表推导中使用 if 语句而没有 else 语句,例如:
post = [x for x in range(10) if x > 5]
# equivalent to: post = [6, 7, 8, 9]
我意识到列表理解是完全不同的功能。请记住,我的问题是为什么在列表文字中不能使用没有 else 的 if 语句?此限制是否避免了一些我不知道的问题?
【问题讨论】:
-
['a', 'b', 'c']表示法不是列表理解。 -
x if cond else y在 Python 中是一个表达式。无论条件是真还是假,它都必须有一个值。这就是为什么您必须始终提供替代方案。您将表达式与if cond: do_somethig语句混淆了。 -
if condition else 'd'是一个条件表达式。在某些方面它与理解中允许的if表达式相似,但并不相同。这两者都不同于if... elif... else复合语句。 -
这是一个非常一般性的问题,进入教程级别(题外话)。正如您所发现的,您提到的每种技术的工作方式都不同。何时使用它们完全取决于您当时想要做什么。
标签: python python-3.x list if-statement