我有两个列表,其中条件是在不同的地方定义的。在
>>> [ x**2 if x%2==0 else x**3 if x%3==0 else 0 for x in range(10)]
[0, 0, 4, 27, 16, 0, 36, 0, 64, 729]
>>> [ x**2 if x%2==0 for x in range(10) ]
File "<stdin>", line 1
[ x**2 if x%2==0 for x in range(10) ]
^
SyntaxError: invalid syntax
但是,如果我这样做:
^{pr2}$它起作用了。在
现在让人困惑的是如何计算订单。有什么区别?在
从docs:
因此,根据定义,
if
位于for
之后。在你混淆了两个完全不同的结构。在
列表理解的条件只能在最后一个平面上定义,它们的作用类似于过滤器:
您看到的另一个构造是python版本的ternary operator。它不是过滤器,它只是根据第三个表达式的逻辑值选择其中一个表达式:
^{pr2}$这里有两个不同的概念混淆了。在
像}不是这种情况时,Python必须知道表达式的计算结果。在
x**2 if x%2==0 else x**3
这样的表达式是一个条件表达式。它们可以被链接,但是else
是不是可选的——因为这是一个自包含的表达式,计算结果是一个单一的特定值。else x**3
是必需的,因为每当{在列表理解中,当您编写类似
[x**2 for x in range(10) if x%2==0]
的内容时,if
子句用于过滤找到的x
值in range(10)
,for
计算得到的列表中的哪些元素。这里不允许else
,因为目的完全不同。在你可以混合搭配:}作为这些
[x**2 if x%2 == 0 else x**3 for x in range(10) if x%3 == 0]
。现在,if x % 3 == 0
被用来决定为哪个x
值计算结果,if x%2 == 0
被用来决定是使用x**2
还是{x
的计算结果相关问题 更多 >
编程相关推荐