列表综合的语法差异

  • 本文关键字:语法 综合 列表 python
  • 更新时间 :
  • 英文 :


我很感激这可能是重复的,但是在这里查看了一些问题之后,我仍然看不到答案。

我使用列表理解从我的代码中获取语法错误。我有一个列表,一个包含一些数字的列表,并且正在尝试输出一个新列表,仅包含偶数数字。

我要缩短的代码是:

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

第一种情况是什么问题?

用于使用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 After…in Aft the Ins Is列表综合的一部分,用于从源中过滤元素的一部分。

很简单,如果没有"其他",则必须在列表的末尾进行" if"语句。您可以写:

A if <condition> else D for B in C

但是你不能写

A if <condition> for B in C

因为没有"其他"。

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不同(

但是您在for之前和没有else之前不能使用if,因为它:

  • 不是"三元"代码块
  • 不是发电机的if陈述,因为它是在for
  • 之前

因此会引起错误。

最新更新