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

如何基于已有函数用嵌套for循环计算所有DNA序列reads重叠

get_all_overlaps 实现方案

实现逻辑

  • 外层循环遍历所有read作为左侧序列的来源,为每个左read初始化对应的内层存储字典
  • 内层循环遍历所有read作为右侧序列的来源
  • 若左右read为同一条,直接跳过该无意义组合
  • 调用已有的get_overlap函数计算当前左右序列的重叠片段,取片段长度作为重叠碱基数
  • 将右read名和对应碱基数存入当前左read的内层字典中

完整代码

# 你已实现的重叠计算函数(修正原代码缩进错误)
def get_overlap(left, right):
    max_overlap = min(len(left), len(right))
    for i in range(max_overlap):
        ovl = max_overlap - i
        if left[-ovl:] == right[:ovl]:
            return left[-ovl:]
    return ''

# 要求实现的get_all_overlaps函数
def get_all_overlaps(reads):
    overlap_dict = {}
    # 外层循环:遍历所有作为左侧的read
    for left_name, left_seq in reads.items():
        overlap_dict[left_name] = {}
        # 内层循环:遍历所有作为右侧的read
        for right_name, right_seq in reads.items():
            # 排除read与自身的重叠计算
            if left_name == right_name:
                continue
            # 计算重叠碱基数
            overlap_seq = get_overlap(left_seq, right_seq)
            overlap_dict[left_name][right_name] = len(overlap_seq)
    return overlap_dict

# 测试用read映射字典
read_map = {
    'Read1': 'GGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTCGTCCAGACCCCTAGC',
    'Read3': 'GTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGTCGTGAACACATCAGT',
    'Read2': 'CTTTACCCGGAAGAGCGGGACGCTGCCCTGCGCGATTCCAGGCTCCCCACGGG',
    'Read5': 'CGATTCCAGGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTC',
    'Read4': 'TGCGAGGGAAGTGAAGTATTTGACCCTTTACCCGGAAGAGCG',
    'Read6': 'TGACAGTAGATCTCGTCCAGACCCCTAGCTGGTACGTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGT'
}

# 调用测试
if __name__ == '__main__':
    result = get_all_overlaps(read_map)
    print(result)

输出说明

运行上述代码得到的输出结构与题目给出的示例完全一致,所有read对的左-右方向重叠碱基数都会被正确记录在嵌套字典中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:54:04