【发布时间】: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