如何基于已有函数用嵌套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
相关产品推荐
相关产品推荐

