列表理解的语法差异

2024-03-29 00:08:46 发布

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

我很感激这可能是一个重复,但在审查了几个问题后,我仍然无法看到答案。你知道吗

我得到了一个语法错误,从我的代码使用列表理解。我有一个列表,a,包含一些数字,并试图输出一个新的列表,只包含偶数。你知道吗

我要缩短的代码是:

b = [] 
for num in a:
    if num % 2 == 0:
        b.append(num)
print(b)

我写的是:

evens = [num if num % 2 == 0 for num in a]
                               ^
SyntaxError: invalid syntax

然而,我得到了一个语法错误在上述点。你知道吗

我把理解改写为:

even = [num for num in a if num % 2 ==0]

这就成功了。你知道吗

通过阅读文档,我知道有两种方法可以编写一个列表:

A for B in C if <condition>

以及

A if <condition> for b in C

第一种情况怎么了?你知道吗


Tags: 答案代码in列表forif数字condition
3条回答

对于带有if else的列表理解:

[f(x) if condition else g(x) for x in sequence] # expression1 if condition else expression2 for item in iterable

并且,对于仅具有if条件的列表理解:

[f(x) for x in sequence if condition] # expression for item in iterable if condition

请注意,这实际上使用了另一种语言结构,即条件表达式,它本身不是理解语法的一部分,而for…in后面的if是列表理解的一部分,用于过滤源iterable中的元素。你知道吗

Python有一个三元运算符。给你:

A if COND else B

它被用作整个代码块。列表生成器也可以在正文的末尾有一个if-语句,用于过滤值。所有这些发电机都是正确的:

[A for ... in very_long_iterator]
[(A if COND else B) for ... in very_long_iterator]
[(A if COND else B) for ... in very_long_iterator if COND2]

()不是必需的,但它们用于区别if else和generator if)

但是不能在for之前使用if,也不能在没有else的情况下使用if,因为它:

  • 不是“三元”代码块
  • 不是生成器的if-语句,因为它在for之前

所以这就产生了一个错误。你知道吗

很简单,如果没有“else”,那么“if”语句必须出现在列表的末尾。你可以写:

A if <condition> else D for B in C

但你不会写字

A if <condition> for B in C

因为没有“别人”。你知道吗

相关问题 更多 >