列表理解 For 循环 + 三元运算 For 循环?

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)

这会引发语法错误。有没有办法在一行中做到这一点?

Mar*_*ers 3

这里不需要任何条件表达式*,因为总是返回一个列表,即使只包含一个单词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)

条件表达式可以用在任何可以在语法中使用简单表达式的地方;这意味着它所说的任何地方expressionold_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运算符也是一个三元运算符。