【发布时间】:2014-05-10 06:58:30
【问题描述】:
>>> row = [1,2,3,4,"--"]
>>> row = [cell.replace("--","hello") for cell in row if cell == "--"]
>>> row
['hello']
如何通过列表理解获得[1,2,3,4,"hello"]?
【问题讨论】:
标签: python if-statement list-comprehension
>>> row = [1,2,3,4,"--"]
>>> row = [cell.replace("--","hello") for cell in row if cell == "--"]
>>> row
['hello']
如何通过列表理解获得[1,2,3,4,"hello"]?
【问题讨论】:
标签: python if-statement list-comprehension
您可以改用conditional expression:
["hello" if cell == "--" else cell for cell in row]
这是左侧元素生成表达式的一部分,而不是列表解析语法本身,其中if 语句充当过滤器。
条件表达式使用形式true_expression if test_expression else false_expression;它总是产生一个值。
我稍微简化了表达;如果你用"hello"替换"--",你也可以直接返回"hello"。
【讨论】:
[cell.replace("--","hello") if cell=="--" else cell for cell in row]
当在for 末尾使用if 时,它会限制考虑哪些项目,因此该版本将只返回一项,因为源列表中只有一项符合条件。
同样在这种情况下您不需要使用replace,您可以直接使用"hello" if cell=="--",但如果您有多个要操作的项目,则可以使用此表单。
【讨论】: