我很欣赏这可能是重复的,但是在这里回顾了几个问题之后,我仍然看不到答案。
我使用列表推导从代码中获取语法错误。我有一个列表a,其中包含一些数字,并且正在尝试输出仅包含偶数的新列表。
我要简化的代码是:
/settings
我写的是:
<Router basename="/settings">
{ /* ... */ }
</Router>
但是我在以上几点出现语法错误。
我将理解理解为:
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]
在第一种情况下怎么了?
答案 0 :(得分:0)
很简单,如果没有“ else”,则“ if”语句必须放在列表理解的末尾。您可以编写:
A if <condition> else D for B in C
但是你不能写
A if <condition> for B in C
因为没有“ else”。
答案 1 :(得分:0)
对于具有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是列表理解的一部分,用于从可迭代的源中筛选元素。
答案 2 :(得分:0)
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区别开来)
但是您不能在if
之前和没有for
的情况下使用else
,因为它是:
if
语句,因为它在for
之前因此它引发了一个错误。