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