Rob*_*rto 8 python list-comprehension
这可以写成一行没有列表理解吗?
for x in vec:
if x > 3:
...
...
Run Code Online (Sandbox Code Playgroud)
不,你不能。Python语言参考指出:
\n\n\n\n\n复合语句由一个或\n多个\xe2\x80\x98子句组成。\xe2\x80\x99子句由\n标头和\xe2\x80\x98套件组成。\xe2\x80\x99子句\n标头特定复合语句的缩进级别都相同。每个子句标头都以唯一标识关键字开头,并以冒号结尾。套件是由子句控制的一组语句。套件可以是一个或多个\n 以分号分隔的简单语句\n 与标题在同一行,\n 位于标题\xe2\x80\x99 的冒号之后,\n 也可以是一个或多个缩进语句\n在后续行中。只有后一种形式的套件可以包含嵌套的复合语句;以下内容是非法的,主要是因为无法明确下面的 else 子句属于哪个 if 子句:
\n
if test1: if test2: print x\nRun Code Online (Sandbox Code Playgroud)\n\n事实上,PythonSyntaxError为上面的嵌套 if 生成了一个。更正式地讲for,这是它在 Python 中的语法:
for_stmt ::= "for" target_list "in" expression_list ":" suite\n ["else" ":" suite]\n\nsuite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT\n\nstmt_list ::= simple_stmt (";" simple_stmt)* [";"]\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,whenfor后面跟着一个不带缩进的语句,该语句必须是 a stmt_list,它只允许simple_stmt实例。simple_stmt这是:
simple_stmt ::= expression_stmt\n | assert_stmt\n | assignment_stmt\n | augmented_assignment_stmt\n | pass_stmt\n | del_stmt\n | print_stmt\n | return_stmt\n | yield_stmt\n | raise_stmt\n | break_stmt\n | continue_stmt\n | import_stmt\n | global_stmt\n | exec_stmt\nRun Code Online (Sandbox Code Playgroud)\n\n其中不包括像ifand 这样的复合语句for。
也就是说,请记住 Python 的语法旨在清晰。因此,最好不要嵌套此类语句,这就是生成器/列表推导式的用途。如果您认为您的计算对于单行来说足够简单,那么推导式就适合您。否则,您真的不想将所有内容都放在一行上而使代码变得混乱 - 用缩进很好地分解它。如今,多加几行并不需要花费太多。
\n| 归档时间: |
|
| 查看次数: |
15420 次 |
| 最近记录: |