如何优化Python目录筛选逻辑:直接包含Supervisor与含XXX_的目录?
优化后的简洁写法
嘿,完全理解你想让这段代码更优雅的想法——没必要先过滤再单独追加,咱们可以把逻辑合并成一步,既简洁又易读。这里有几种不错的方案:
方案1:列表推导 + 直接拼接(最直观)
直接在筛选后的列表后面拼接上['Supervisor'],一步到位:
import os dirs = [os.path.basename(dir[0]) for dir in os.walk(os.getcwd()) if 'XXX_' in os.path.basename(dir[0])] + ['Supervisor']
不过这里os.path.basename被调用了两次,如果目录数量很多,咱们可以优化一下,先用生成器预处理目录名,避免重复计算:
import os # 先用生成器一次性提取所有目录的basename base_dirs = (os.path.basename(dir[0]) for dir in os.walk(os.getcwd())) # 筛选后直接拼接目标元素 dirs = [d for d in base_dirs if 'XXX_' in d] + ['Supervisor']
方案2:用itertools合并迭代器(适合更复杂的场景)
如果后续可能需要扩展更多额外元素,用itertools.chain来合并筛选结果和额外元素会更灵活:
import os import itertools base_dirs = (os.path.basename(dir[0]) for dir in os.walk(os.getcwd())) filtered_dirs = (d for d in base_dirs if 'XXX_' in d) # 合并筛选结果和['Supervisor'],最后转成列表 dirs = list(itertools.chain(filtered_dirs, ['Supervisor']))
为什么这样更好?
- 把原来的三步操作(获取所有目录→筛选→追加)压缩成了一步或两步,逻辑更连贯
- 避免了额外的列表赋值操作,减少了中间变量
- 生成器的使用还能节省一点内存(尤其是目录数量庞大时)
内容的提问来源于stack exchange,提问作者Barry Buehne
相关产品推荐
相关产品推荐

