我想我理解列表推导和三元运算,我知道我可以将两者结合起来,as seen here .我的问题涉及将两个表达式组合在一个列表理解中。
例如,如果我有以下列表:
lst = ['word','word','multiple words','word']
我想在一行中修改该列表,有没有办法这样做?我尝试了我认为最明显的构造:
lst[:] = [word for word in word.split() if ' ' in word else word for word in lst]
这会引发语法错误。有没有办法在一行中做到这一点?
最佳答案
您在这里不需要任何条件表达式*,因为str.split()
总是返回一个列表,即使只包含一句话:
lst[:] = [word for words in lst for word in words.split()]
演示:
>>> lst = ['word','word','multiple words','word']
>>> [word for words in lst for word in words.split()]
['word', 'word', 'multiple', 'words', 'word']
只要可以在语法中使用简单表达式,就可以使用条件表达式;这意味着在 list display grammar 中它说 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]
因此,列表理解的第一部分,以及生成最外层迭代器(计算一次)、if
表达式或任何嵌套迭代器(计算下一个迭代的每次迭代)的部分外层 for
循环)。
*叫做条件表达式;它是三元运算符,但 SQL BETWEEN
运算符也是。
关于python - 列表理解for循环+三元运算for循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22734759/