我创建了一个 mutate_v1 函数,可以在 DNA 序列中生成随机突变。
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 ''.join(dna_list)
如果我将我的函数应用于G0
的所有元素,我会得到新一代(G1
)突变体(突变序列列表 )。
G0 = ['CTGAA', 'CTGAA', 'CTGAA', 'CTGAA', 'CTGAA']
G1 = [mutate_v1(s,0.01) for s in G0]
#G1
['CTGAA', 'CTGAA', 'CTGAA', 'CTGAA', 'CTGAA']
如何重复我的功能直至 G20(20 代)?
我可以像下面这样手动完成
G1 = [mutate_v1(s,0.01) for s in G0]
G2 = [mutate_v1(s,0.01) for s in G1]
G3 = [mutate_v1(s,0.01) for s in G2]
G4 = [mutate_v1(s,0.01) for s in G3]
G5 = [mutate_v1(s,0.01) for s in G4]
G6 = [mutate_v1(s,0.01) for s in G5]
G7 = [mutate_v1(s,0.01) for s in G6]
但我确信 for 循环会更好。 我测试过几个codes但没有结果。
有人可以帮忙吗?
最佳答案
使用range迭代到代数,并将每一代存储在一个列表中,每一代都是前一代变异的结果:
G0 = ['CTGAA', 'CTGAA', 'CTGAA', 'CTGAA', 'CTGAA']
generations = [G0]
for _ in range(20):
previous_generation = generations[-1]
generations.append([mutate_v1(s, 0.01) for s in previous_generation])
# then you can access by index to a generation
print(generations[1]) # access generation 1
print(generations[20]) # access generation 20
输出
['CTGAA', 'CTGAA', 'CTGAA', 'CTGAA', 'CTGAA']
['CTGAA', 'CTGAA', 'CTGAA', 'CTGAA', 'CTGAT']
关于python - 使用for循环的结果在python中创建新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69588270/