能否在Python列表推导式中使用三元运算批量修改.hpp后缀文件名?
实现代码
可以直接通过列表推导式内嵌三元运算实现,正确的一行写法如下:
newfilenames = [x[:-3] + "h" if x[-3:] == "hpp" else x for x in filenames]
优化写法
推荐使用endswith方法判断后缀,避免文件名长度不足3位时触发索引异常,兼容性更强:
newfilenames = [x.removesuffix(".hpp") + ".h" if x.endswith(".hpp") else x for x in filenames]
注:Python 3.9+ 支持removesuffix方法,写法更直观。
原理解释
你之前的写法将判断条件放在了列表推导式末尾的过滤位,作用是仅保留符合条件的元素,因此会丢失所有非.hpp后缀的文件。把三元判断放在元素生成的位置,就会对遍历到的每个文件名都做分支处理,不会过滤掉任何原有元素,运行后即可得到预期输出:['program.c', 'stdio.h', 'sample.h', 'a.out', 'math.h', 'hpp.out']
内容的提问来源于stack exchange,提问作者Jerel Velarde
相关产品推荐
相关产品推荐

