python - 列表理解for循环+三元运算for循环?

标签 python list syntax list-comprehension

我想我理解列表推导和三元运算,我知道我可以将两者结合起来,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 中它说 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]

因此,列表理解的第一部分,以及生成最外层迭代器(计算一次)、if 表达式或任何嵌套迭代器(计算下一个迭代的每次迭代)的部分外层 for 循环)。

*叫做条件表达式;它是三元运算符,但 SQL BETWEEN 运算符也是。

关于python - 列表理解for循环+三元运算for循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22734759/

相关文章:

python - 有没有办法让 numpy 数组中的数字随机为正或负?

python - 使用 apply 函数在 pandas 中创建一个具有舍入值的新列

python - 如何在Python中的列表中转换具有逗号分隔值的字符串?

list - Tcl 列表中的变量替换

c++ - 关于循环和迭代器的 c++11 范围

寻找素数的 Haskell 列表理解

python - pandas df 的新日期列(有条件)

python - Knearest() 函数在 opencv 2.4.8 和 python 2.7.5 中不起作用

jQuery 列表图标更改

c++ - 为什么我不能用 nullptr 初始化自动推导出的指针?