Bee*_*ars 5 python syntax list-comprehension list
我想我了解列表推导式和三元运算,并且我明白我可以将两者结合起来,如下所示。我的问题涉及在一个列表理解中组合两个表达式。
例如,如果我有以下列表:
lst = ['word','word','multiple words','word']
Run Code Online (Sandbox Code Playgroud)
我想在一行中修改该列表,有没有办法这样做?我尝试了我认为最明显的结构:
lst[:] = [word for word in word.split() if ' ' in word else word for word in lst]
Run Code Online (Sandbox Code Playgroud)
这会引发语法错误。有没有办法在一行中做到这一点?
这里不需要任何条件表达式*,因为总是返回一个列表,即使只包含一个单词:str.split()
lst[:] = [word for words in lst for word in words.split()]
Run Code Online (Sandbox Code Playgroud)
演示:
>>> lst = ['word','word','multiple words','word']
>>> [word for words in lst for word in words.split()]
['word', 'word', 'multiple', 'words', 'word']
Run Code Online (Sandbox Code Playgroud)
条件表达式可以用在任何可以在语法中使用简单表达式的地方;这意味着它所说的任何地方expression
或old_expression
在列表中显示语法:
list_display ::= "[" [expression_list | list_comprehension] "]"
list_comprehension ::= expression list_for
list_for ::= "for" target_list "in" old_expression_list [list_iter]
old_expression_list ::= old_expression [("," old_expression)+ [","]]
old_expression ::= or_test | old_lambda_expr
list_iter ::= list_for | list_if
list_if ::= "if" old_expression [list_iter]
Run Code Online (Sandbox Code Playgroud)
因此,列表理解的第一部分,也是生成最外层迭代器(计算一次)、if
表达式或任何嵌套迭代器(计算下一个外for
循环的每次迭代)的部分。
*称为条件表达式;它是一个三元运算符,但 SQLBETWEEN
运算符也是一个三元运算符。
归档时间: |
|
查看次数: |
6411 次 |
最近记录: |