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

如何优化.mcool文件染色体重命名代码中的冗余嵌套循环?

优化mcool文件染色体名称前缀添加代码

需求说明

针对所有.mcool文件,处理每个分辨率对应的cooler对象:若染色体名称不以"chr"前缀开头,需生成映射字典trans = {chrom: f"chr{chrom}" for chrom in clr.chromnames},再调用cooler.rename_chroms(clr, trans)为符合条件的染色体添加"chr"前缀。

问题分析

原代码存在冗余操作:遍历每个需要添加前缀的染色体时,重复生成完整的映射字典,且多次调用rename_chroms方法,这会导致不必要的计算开销,降低处理效率。

原代码

pathlist = Path(data_dir).glob('**/*.mcool')
for path in pathlist:
     
     cool_file = str(path)
     filename = cool_file.split("/",1)[1]    
     resolution = [i.rsplit("/", 1)[1] for i in cooler.fileops.list_coolers(cool_file)]
         
     ### load a cooler for each resolution 
     for j in resolution:
            clr = cooler.Cooler(f'{cool_file}::resolutions/{j}')
            for chrom in (chrom for chrom in clr.chromnames if not chrom.startswith("chr")):
                trans = {chrom: f"chr{chrom}" for chrom in clr.chromnames}
                cooler.rename_chroms(clr, trans)
            print(f'chromosomes: {clr.chromnames}, binsize: {clr.binsize}')  

优化后代码

pathlist = Path(data_dir).glob('**/*.mcool')
for path in pathlist:
     
     cool_file = str(path)
     filename = cool_file.split("/",1)[1]    
     resolution = [i.rsplit("/", 1)[1] for i in cooler.fileops.list_coolers(cool_file)]
         
     ### load a cooler for each resolution 
     for j in resolution:
            clr = cooler.Cooler(f'{cool_file}::resolutions/{j}')
            # 一次性生成完整映射字典,仅为无chr前缀的染色体添加前缀
            trans = {chrom: f"chr{chrom}" if not chrom.startswith("chr") else chrom for chrom in clr.chromnames}
            # 检查是否有需要修改的染色体,避免无意义调用
            if any(not chrom.startswith("chr") for chrom in clr.chromnames):
                cooler.rename_chroms(clr, trans)
            print(f'chromosomes: {clr.chromnames}, binsize: {clr.binsize}')  

优化点说明

  • 一次性生成完整的映射字典,无需在循环中重复创建
  • 先判断是否存在需要修改的染色体,避免对已经符合要求的cooler对象执行无意义的rename_chroms调用
  • 移除冗余的嵌套循环,将逻辑简化为一次映射+一次方法调用,大幅提升处理效率

输入输出示例

输入(clr.chromnames)

['M', 'chr1', '2', '3', 'chr4']
['7', '8', 'chr9', '10', '11', 'chr12']
['X', 'chrY', 'chr1', '2', '4']

预期输出(clr.chromnames)

['chrM', 'chr1', 'chr2', 'chr3', 'chr4']
['chr7', 'chr8', 'chr9', 'chr10', 'chr11', 'chr12']
['chrX', 'chrY', 'chr1', 'chr2', 'chr4']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:05:03