python - 使用for循环的结果在python中创建新列表

标签 python for-loop nested bioinformatics dna-sequence

我创建了一个 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/

相关文章:

python - 使用py2exe转换程序和传递选项时出现RuntimeError

java - 如何避免重复出现相同的号码?

C++ for 循环练习

java - 如何打印最大到用户输入的整数的素数?

python - reshape 我的 pandas 数据框

python - 如何使用 Keras 作为高级 API 在 tensorflow 上实现批量归一化

javascript - for循环内的函数调用打破了循环

php - 如何在嵌套数组中查找叶数组?

r - 将函数绑定(bind)到列表

python - 是否可以使用 Python Tkinter 制作自定义鼠标光标? (将 matplotlib 与 TkAgg 后端一起使用)