python - 如何基于 1000 个符号字符串打印出带有单个替换元素的 1000 个新字符串?

标签 python algorithm bioinformatics

这里会有一点分子生物学。

所以我需要根据 1000 个核苷酸的主要序列生成 1000 个突变序列。与前面的序列相比,每个随后的突变序列必须有一个随机核苷酸切换到同一类别之一(A 到 G,反之亦然;T 到 C,反之亦然)。此外,必须使用 random.randintrandom.seed(1)

这是我目前所拥有的:

import random
# below is the initial sequence
seq = 'CGCCTGTAATCCCAGCACTCTGGGAGGCAGAGGTGGGCCGATCACTTGAGGTCAGGAGTTCGAGACCAGCCTGGGCAACATGGTGAAACACCATCTCTACTAAAAACACAAAAATTAGCCAGGTGTGGTGGCAGGCACCTGCAGTCCCAGCTACTCCGGAGGCTGAGGCAGGAGAATTGCTCGAACCTGGGAGGCAGGGGTTGCAGTGAGCCGACATGGCGCCACTGCACTCCAGTCTGGGCGACAGAGTGAGACCCTATCTCAAAAAAAAAAAAAAAAAAAAAAGACCCAACTCAAGTATCATCTCCAGGAAGCCTTCCCCTACTCCCAGCAATTAAATGCTCCTCAGAGAATTCCCATTTTTGGTTTACTCTTTGGTTTACCTCCAGACAGGAAGCCCCCACTGACACTGTTGTAGTCCCAGGGTGCAACACAAAGCAGAGATCACAAGCTGAGTTTAATAATTGCTTGTGGAATACATGTCCCAAGCCACCTCCTGCAGGAAGCCCTTCCAGATGCCCATTCTAGCCAGTCTGGCTCTTTGCTTCCATACCTTCACAACACTTGTGCCTCCCCCAGGGCCTCTTTCTCATCTTGCTTTCTGGGGCAGCTGTGTGCACATTTGTCTGTGTGCAGCAACTCTCTAAGGCAGGGATTTTTACTCCTATTTTTGATGAGGGGAGCTGTGGCTCAGAGAGGTTGAATAACCTAAGGCCACACAGTGAGTGGCAGAGCCAGGAATGTGACTTGGGTCCATTTGAATCCAAAGTCCCTGTACTTTCCACTGCCCTACCTAGATGTCCCTGTACCTCCTATAAAATCAGCATGGAGCCTGGTGCCTGGTAGTCCCTACAAATATTCACAAATTGGAGCTTAGCTCAGCTCTCAGGCAAGGCCCAGGTCAAAAGGGCAGATACAGCTTTGGGACCTTAGTTGCCACCACATGCCATACCTTCTTCCCAGCAGAAGGACTCCCTCCAAGACAGGGTAGGGGTGGAGG'
n = 0
while n <= 1000: # setting up a cycle for 1000 mutations
    i = random.randint(0, 1001) # choosing  random nucleotide to switch
    if seq[i] == 'A':
        print(seq.replace('A', 'G', 1)) # the third argumunt is supposed to show how many times a nucleotide must be switched but it does't work for some reason
    elif seq[i] == 'G':
        print(seq.replace('G', 'A', 1))
    elif seq[i] == 'C':
        print(seq.replace('C', 'T', 1))
    elif seq[i] == 'T':
        print(seq.replace('T', 'C', 1))
    n = n + 1

我遇到的主要问题是让程序根据先前序列而不是原始序列生成新突变,并且只替换一个核苷酸。

最佳答案

您需要更新循环中的核苷酸序列。字符串不能更改,所以我建议只使用字母列表开始:

import random

# Since string cannot be changed/mutated, 
# break up sequence into a list of strings
seq = list('CGCCTGTAATCCCAGCACTCTGGGAGGCAGAGGTGGGCCGATCACTTGAGGTCAGGAGTTCGAGACCAGCCTGGGCAACATGGTGAAACACCATCTCTACTAAAAACACAAAAATTAGCCAGGTGTGGTGGCAGGCACCTGCAGTCCCAGCTACTCCGGAGGCTGAGGCAGGAGAATTGCTCGAACCTGGGAGGCAGGGGTTGCAGTGAGCCGACATGGCGCCACTGCACTCCAGTCTGGGCGACAGAGTGAGACCCTATCTCAAAAAAAAAAAAAAAAAAAAAAGACCCAACTCAAGTATCATCTCCAGGAAGCCTTCCCCTACTCCCAGCAATTAAATGCTCCTCAGAGAATTCCCATTTTTGGTTTACTCTTTGGTTTACCTCCAGACAGGAAGCCCCCACTGACACTGTTGTAGTCCCAGGGTGCAACACAAAGCAGAGATCACAAGCTGAGTTTAATAATTGCTTGTGGAATACATGTCCCAAGCCACCTCCTGCAGGAAGCCCTTCCAGATGCCCATTCTAGCCAGTCTGGCTCTTTGCTTCCATACCTTCACAACACTTGTGCCTCCCCCAGGGCCTCTTTCTCATCTTGCTTTCTGGGGCAGCTGTGTGCACATTTGTCTGTGTGCAGCAACTCTCTAAGGCAGGGATTTTTACTCCTATTTTTGATGAGGGGAGCTGTGGCTCAGAGAGGTTGAATAACCTAAGGCCACACAGTGAGTGGCAGAGCCAGGAATGTGACTTGGGTCCATTTGAATCCAAAGTCCCTGTACTTTCCACTGCCCTACCTAGATGTCCCTGTACCTCCTATAAAATCAGCATGGAGCCTGGTGCCTGGTAGTCCCTACAAATATTCACAAATTGGAGCTTAGCTCAGCTCTCAGGCAAGGCCCAGGTCAAAAGGGCAGATACAGCTTTGGGACCTTAGTTGCCACCACATGCCATACCTTCTTCCCAGCAGAAGGACTCCCTCCAAGACAGGGTAGGGGTGGAGG')

for n in range(1000):  # setting up a cycle for 1000 mutations
    i = random.randint(0, len(seq)-1)  # choosing  random nucleotide to switch

    print(i)
    print(seq[i])  # i-th nucleotide before the mutation

    if seq[i] == 'A':
        seq[i] = 'G'
    elif seq[i] == 'G':
        seq[i] = 'A'
    elif seq[i] == 'C':
        seq[i] = 'T'
    elif seq[i] == 'T':
        seq[i] = 'C'

    print(seq[i]). # i-th nucleotide after the mutation

    print(''.join(seq))  # join nucleotides into a string for printing

关于python - 如何基于 1000 个符号字符串打印出带有单个替换元素的 1000 个新字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70489304/

相关文章:

python - 在 ctypes.Structure 中使用枚举

python - 是否有 turtle-graphics 使用的关键事件名称的完整列表?

python - 如何在不丢失 Python 中的堆属性的情况下删除堆中的特定元素?

python - python 中的 Networkx min_weighted_vertex_cover 返回整个集合而不是顶点覆盖

r - 使 R Shiny 的 renderPlot 对文本输入使用react

python - 返回 Zapier 代码中未解析的字典列表

Python, float 可以有多长的小数点?

algorithm - 为什么我们要努力保持树木平衡

graph - 如何一次获取多个rna序列的图特征值?

python - 如何使用 Python 和 PIL 库从 DNA 序列创建条形码?