You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用列表推导式简洁生成输出文件名列表,避免重复调用os.path.splitext

这个场景完全适合用列表推导式实现,且可以避免重复调用os.path.splitext,有两种常用实现方案:

方案1:全Python版本兼容写法

利用单元素元组的迭代完成一次性赋值,只会调用一次os.path.splitext,性能和原生for循环完全一致:

import os
names = [f"{base}_env{ext}" for file in f_list for base, ext in (os.path.splitext(file),)]

原理是末尾的for base, ext in (os.path.splitext(file),)只会迭代一次(因为元组只有一个元素),相当于在推导式内部完成了变量解包赋值,没有额外开销。

方案2:Python 3.8+ 可选写法

如果运行环境支持Python 3.8及以上版本,也可以用海象运算符先缓存os.path.splitext的返回值:

import os
names = [f"{split_res[0]}_env{split_res[1]}" for file in f_list if (split_res := os.path.splitext(file))]

这里的if判断仅用来完成赋值操作,os.path.splitext永远不会返回空值,所以不会过滤任何元素。

补充说明

如果团队对代码可读性要求很高,你原来的显式for循环也是非常合理的实现,不需要刻意追求列表推导式的写法,两种写法的运行效率没有本质差异。

内容的提问来源于stack exchange,提问作者Josiah Lund

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:54:03