【问题标题】:Is it possible to use ternary operations on list comprehension? [duplicate]是否可以在列表理解上使用三元运算? [复制]
【发布时间】:2022-01-12 06:14:25
【问题描述】:

给定一组文件名

filenames = ["program.c", "stdio.hpp", "sample.hpp", "a.out", "math.hpp", "hpp.out"]

我想把以“.hpp”结尾的文件改成以“.h”结尾,像这样:

['program.c', 'stdio.h', 'sample.h', 'a.out', 'math.h', 'hpp.out']

使用列表理解,我可以选择和更改目标,

newfilenames = [x[:-3]+"h" for x in filenames if x[-3:] == "hpp"]

但这会忽略所有其他内容并仅输出: ['stdio.h', 'sample.h', 'math.h']

有没有办法使用列表理解上的三元运算将下面的代码简化为单行代码

newfilenames = []
for x in filenames: 
  newfilenames.append(x[:-3]+"h") if x[-3:] == 'hpp' else newfilenames.append(x) 
print(newfilenames)

【问题讨论】:

  • filenames = [n.replace(".hpp", "h") for n in filenames]
  • 你不应该使用像这样的三元表达式:newfilenames.append(x[:-3]+"h") if x[-3:] == 'hpp' else newfilenames.append(x),重点是它应该评估为一个值。如果只是为了副作用,使用语句
  • 或者,使用的表达式:newfilenames.append(x[:-3]+"h") if x[-3:] == 'hpp' else x)

标签: python list list-comprehension conditional-operator


【解决方案1】:

您可以使用 if / else 条件来构建列表理解,如下所示:

newfilenames = [x[:-3]+"h" if x[-3:] == "hpp" else x for x in filenames]

这将允许列表推导将“hpp”字符串修改为“h”,但还包括您不打算更改的其他元素。

【讨论】:

    猜你喜欢
    • 2011-02-26
    • 2019-10-08
    • 1970-01-01
    • 2020-02-20
    • 2016-10-04
    • 2015-07-10
    • 2021-09-03
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多