是否可以在列表理解上使用三元运算? [复制]
Posted
技术标签:
【中文标题】是否可以在列表理解上使用三元运算? [复制]【英文标题】: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)
【参考方案1】:
您可以使用 if / else 条件来构建列表理解,如下所示:
newfilenames = [x[:-3]+"h" if x[-3:] == "hpp" else x for x in filenames]
这将允许列表推导将“hpp”字符串修改为“h”,但还包括您不打算更改的其他元素。
【讨论】:
以上是关于是否可以在列表理解上使用三元运算? [复制]的主要内容,如果未能解决你的问题,请参考以下文章