Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成不含特定序列的DNA序列_Python_Dna Sequence - Fatal编程技术网

Python 生成不含特定序列的DNA序列

Python 生成不含特定序列的DNA序列,python,dna-sequence,Python,Dna Sequence,我刚刚开始学习用python编程。在课堂上,我们被要求生成一个随机的DNA序列,该序列不包含特定的6个字母序列(AACGTT)。关键是做一个函数,它总是返回一个合法的序列。目前,我的函数大约有78%的时间生成正确的序列。我怎样才能让它在100%的时间内返回一个合法的squeuence?感谢您的帮助 以下是我的代码目前的样子: from random import choice def generate_seq(length, enzyme): list_dna = [] nucl

我刚刚开始学习用python编程。在课堂上,我们被要求生成一个随机的DNA序列,该序列不包含特定的6个字母序列(AACGTT)。关键是做一个函数,它总是返回一个合法的序列。目前,我的函数大约有78%的时间生成正确的序列。我怎样才能让它在100%的时间内返回一个合法的squeuence?感谢您的帮助

以下是我的代码目前的样子:

from random import choice
def generate_seq(length, enzyme):
    list_dna = []
    nucleotides = ["A", "C", "T", "G"]
    i = 0
    while i < 1000:
        nucleotide = choice(nucleotides)
        list_dna.append(nucleotide)
        i = i + 1

    dna = ''.join(str(nucleotide) for nucleotide in list_dna)
    return(dna) 


seq = generate_seq(1000, "AACGTT")
if len(seq) == 1000 and seq.count("AACGTT") == 0:
    print(seq)
来自随机导入选择
def生成顺序(长度、酶):
列表\u dna=[]
核苷酸=[“A”、“C”、“T”、“G”]
i=0
当我<1000时:
核苷酸=选择(核苷酸)
列表\u dna.append(核苷酸)
i=i+1
dna=''。连接(列表中核苷酸的str(核苷酸)
报税表(dna)
序号=生成序号(1000,“AACGTT”)
如果len(seq)=1000且seq.count(“AACGTT”)==0:
打印(seq)

一个选项是检查循环中的最后几个条目,只有在尚未创建“坏”序列时才继续追加。然而,这可能导致出现“AACGT”序列的概率高于真实随机概率,只是使用不同的字母而不是最后一个“T”

来自随机导入选择
def生成顺序(长度、酶):
列表\u dna=[]
核苷酸=[“A”、“C”、“T”、“G”]
i=0
当我<1000时:
核苷酸=选择(核苷酸)
列表\u dna.append(核苷酸)
#检查无效序列。如果找到,请删除最后一个元素并重新绘制
如果“”。加入(列表\u dna[-6:])=“AACGTT”:
list_dna.pop()
其他:
i=i+1
dna=''。连接(列表中核苷酸的str(核苷酸)
报税表(dna)
序号=生成序号(1000,“AACGTT”)
如果len(seq)=1000且seq.count(“AACGTT”)==0:
打印(seq)

一个想法是检查前5个核苷酸是否等于
AACGT
,在这种情况下,只能从
[“A”,“C”,“G”]
中选择

from random import choice


def generate_seq(length, enzyme, bad_prefix="AACGT"):
    list_dna = []
    nucleotides = ["A", "C", "T", "G"]
    i = 0
    while i < 1000:
        if list_dna[-5:] != bad_prefix:
            nucleotide = choice(nucleotides)
        else:
            nucleotide = choice(["A", "C", "G"])
        list_dna.append(nucleotide)
        i = i + 1

    dna = ''.join(str(nucleotide) for nucleotide in list_dna)
    return dna


seq = generate_seq(1000, "AACGTT")
if len(seq) == 1000 and seq.count("AACGTT") == 0:
    print(seq)
来自随机导入选择
def生成顺序(长度、酶、错误前缀=“AACGT”):
列表\u dna=[]
核苷酸=[“A”、“C”、“T”、“G”]
i=0
当我<1000时:
如果列表_dna[-5:]!=错误的前缀:
核苷酸=选择(核苷酸)
其他:
核苷酸=选择([“A”、“C”、“G”])
列表\u dna.append(核苷酸)
i=i+1
dna=''。连接(列表中核苷酸的str(核苷酸)
返回dna
序号=生成序号(1000,“AACGTT”)
如果len(seq)=1000且seq.count(“AACGTT”)==0:
打印(seq)

在22%不合法的情况下,是什么让数据不合法?如果唯一的目标是拥有一个没有6个字母序列的DNA序列,只需更改
核苷酸=[“a”]
并在技术上正确(最好的正确)。如果您碰巧生成了该序列,也可以删除该序列。或者您可以用不同的方式进行约束。这取决于你以后想用这个序列做什么。你的DNA序列可以合法地包含AACGT,但是为了使它合法,选择的下一个碱基只能从[A,C,G]中选取,因为T是不允许的。
from random import choice


def generate_seq(length, enzyme, bad_prefix="AACGT"):
    list_dna = []
    nucleotides = ["A", "C", "T", "G"]
    i = 0
    while i < 1000:
        if list_dna[-5:] != bad_prefix:
            nucleotide = choice(nucleotides)
        else:
            nucleotide = choice(["A", "C", "G"])
        list_dna.append(nucleotide)
        i = i + 1

    dna = ''.join(str(nucleotide) for nucleotide in list_dna)
    return dna


seq = generate_seq(1000, "AACGTT")
if len(seq) == 1000 and seq.count("AACGTT") == 0:
    print(seq)