我很感激这可能是重复的,但是在这里查看了一些问题之后,我仍然看不到答案。
我使用列表理解从我的代码中获取语法错误。我有一个列表,一个包含一些数字的列表,并且正在尝试输出一个新列表,仅包含偶数数字。
我要缩短的代码是:
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
之前
因此会引起错误。