Python如何使用for循环迭代生成20代DNA突变序列列表
首先需要修正原mutate_v1函数的缩进错误:原函数的return语句位于for循环内部,遍历第一个碱基后就会直接返回结果,几乎不会触发预期的突变,修正后的代码如下:
import random def mutate_v1(sequence, mutation_rate): dna_list = list(sequence) for i in range(len(sequence)): r = random.random() if r < mutation_rate: mutation_site = random.randint(0, len(dna_list) - 1) dna_list[mutation_site] = random.choice(list('ATCG')) # return 移到for循环外,遍历完所有碱基再返回突变后的序列 return ''.join(dna_list)
迭代到第20代的实现方案
方案1:仅保留最终第20代结果
# 初始种群G0 current_gen = ['CTGAA', 'CTGAA', 'CTGAA', 'CTGAA', 'CTGAA'] mutation_rate = 0.01 total_generations = 20 for _ in range(total_generations): # 基于当前代突变得到下一代 current_gen = [mutate_v1(seq, mutation_rate) for seq in current_gen] G20 = current_gen print(G20)
方案2:保留所有世代的序列数据(方便后续回溯分析)
# 存储所有世代的列表,索引0对应G0,索引20对应G20 all_generations = [] all_generations.append(['CTGAA', 'CTGAA', 'CTGAA', 'CTGAA', 'CTGAA']) mutation_rate = 0.01 for _ in range(20): # 取上一代的所有序列 last_gen = all_generations[-1] current_gen = [mutate_v1(seq, mutation_rate) for seq in last_gen] all_generations.append(current_gen) # 直接通过索引获取对应世代的序列列表 G20 = all_generations[20]
内容的提问来源于stack exchange,提问作者user8769986
相关产品推荐
相关产品推荐

