随机突变

时间:2019-05-14 15:33:39

标签: python

我是一名Python初学者,我正在编写代码以在随机位置生成随机突变。 我写了一个函数,其中包括:

  1. 发生突变的顺序
  2. 从中随机选择一个核苷酸并替换为原始序列核苷酸的核苷酸列表。

代码的基本概念:

说,我们必须从(A)篮中挑一个球,然后从另一个篮(B)中换另一个球。两个球的颜色必须不同。

我知道我需要使用while循环,但是我做不到。

def random(s)

    length = len(s)
    seq = list(s)
    nucl = "ATGC" ## pick one nucleotide from this list
    lengthnucl= len(nucleotide_list)

    position_orgseq = np.random.choice(range(0,length))
    position_nucl = np.random.choice(range(0,lengthnucl))
    #while c < length:

    ##if the two nucleotides chosen are not equaul then:
    #two nucleotides are from
    # TTTTGGGCCCCAAA - original seq, ATGC = nucloetide list
    if seq[position_orgseq] != nucleotide_list[position_nucl]:


        seq[position_orgseq] = nucleotide_list[position_nucl]
        final = "".join(seq)
    return s,final


actual_seq, mut_seq = random("TTTTGGGCCCCAAA")
print(actual_seq)
print(mut_seq)

1 个答案:

答案 0 :(得分:0)

首先,正如@Error-注释中的Syntatical Remorse所述,无需导入numpy,而应使用内置的random(特别是,您可以使用random.randint())。

您的代码没有运行,您的变量名错误。除此之外,您很亲近。您对使用while循环的直觉是正确的。您可以简单地继续循环,直到两个随机值在两个列表中没有给出相同的核苷酸为止。像这样:

from random import randint


def random(s):
    length = len(s)
    seq = list(s)

    nucl = "ATGC"
    lengthnucl = len(nucl)

    position_orgseq = randint(0, length - 1)
    position_nucl = randint(0, lengthnucl - 1)
    while seq[position_orgseq] == nucl[position_nucl]:
        position_orgseq = randint(0, length - 1)
        position_nucl = randint(0, lengthnucl - 1)

    seq[position_orgseq] = nucl[position_nucl]
    final = "".join(seq)

    return s, final


actual_seq, mut_seq = random("TTTTGGGCCCCAAA")
print(actual_seq)
print(mut_seq)

这可能会进一步优化。