在python中如何评估列表理解,以及在什么ord中

2024-04-25 07:33:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表,其中条件是在不同的地方定义的。在

>>> [ 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}$

它起作用了。在

现在让人困惑的是如何计算订单。有什么区别?在


Tags: in列表forif定义地方stdinline
3条回答

docs

A list comprehension consists of brackets containing an expression followed by a for clause, then zero or more for or if clauses. The result will be a new list resulting from evaluating the expression in the context of the for and if clauses which follow it.

因此,根据定义,if位于for之后。在

你混淆了两个完全不同的结构。在

列表理解的条件只能在最后一个平面上定义,它们的作用类似于过滤器

[ ... for ... if .... ]

您看到的另一个构造是python版本的ternary operator。它不是过滤器,它只是根据第三个表达式的逻辑值选择其中一个表达式:

^{pr2}$

这里有两个不同的概念混淆了。在

x**2 if x%2==0 else x**3这样的表达式是一个条件表达式。它们可以被链接,但是else不是可选的——因为这是一个自包含的表达式,计算结果是一个单一的特定值。else x**3是必需的,因为每当{}不是这种情况时,Python必须知道表达式的计算结果。在

列表理解中,当您编写类似[x**2 for x in range(10) if x%2==0]的内容时,if子句用于过滤找到的xin 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的计算结果

相关问题 更多 >