Python实现支持序列列表输入的指定突变率DNA随机突变功能
优化实现方案
首先你原有代码存在缩进逻辑错误:return语句放在了for循环内部,只会执行第一轮循环就直接返回结果,根本没有遍历所有序列位点,突变逻辑无法正常运行。
以下是修复bug并支持序列列表输入的完整实现:
import random def mutate_v2(sequence_input, mutation_rate): # 处理输入为序列列表的情况 if isinstance(sequence_input, list): output = [] for seq in sequence_input: output.append(_mutate_single(seq, mutation_rate)) return output # 处理输入为单个序列的情况 else: return _mutate_single(sequence_input, mutation_rate) # 抽离单个序列突变逻辑,复用代码 def _mutate_single(sequence, mutation_rate): dna_list = list(sequence) seq_length = len(dna_list) for i in range(seq_length): r = random.random() if r < mutation_rate: # 随机选择突变位点和替换碱基 mutation_site = random.randint(0, seq_length - 1) dna_list[mutation_site] = random.choice(['A', 'T', 'C', 'G']) return ''.join(dna_list)
使用示例
# 单个序列输入测试 single_input = 'ATCTAGGAT' print(mutate_v2(single_input, 0.05)) # 序列列表输入测试 list_sequences = ['ATTCTGTA', 'TTCGCTAA', 'ACCCGCTA'] mutated_list = mutate_v2(list_sequences, 0.01) print(mutated_list)
核心修改说明
- 修复原函数return缩进错误,保证遍历所有序列位点后再返回结果
- 新增输入类型判断,自动适配单个序列/序列列表两种输入场景
- 抽离单个序列的突变逻辑为内部函数,避免代码冗余
- 移除了原代码中的调试打印语句,如果你需要观察突变位点可以自行加回
内容的提问来源于stack exchange,提问作者user8769986
相关产品推荐
相关产品推荐

