我试图在one_frame函数()中输入一个字符串:
SQLiteAssetHelper
我要做的是返回一个列表one_frame("catatgdaftgaatg")
。每当我在字符串中找到["atgdaf","atg"]
时,我想抓住"atg"
以及之后的任何内容,直到我到达"atg"
。这是我到目前为止,但它只返回"taa" "tga" "tag"
。
["atg"]
答案 0 :(得分:1)
dna_list.append(get_orf(dna_string+dna[c:q+3]))
只需更新追加功能......
因为dna_string的长度总是3 ..你永远不会得到6字符所需的结果
<强>更新: - 强> 我忘了你提到的其他条件。
def get_orf(dna_seq):
for x in dna_seq:
# print dna_seq
if("taa" in dna_seq or "tag" in dna_seq or "tga" in dna_seq):
dna_seq=dna_seq.replace("taa","")
dna_seq=dna_seq.replace("tga","")
dna_seq=dna_seq.replace("tag","")
if('atg' in dna_seq[3:]):
dna_seq="atg"+dna_seq[3:].replace("atg","")
return dna_seq
else:
return dna_seq
def one_frame(dna):
c=0
q=3
dna_list=[]
dna_string=""
while(q<=len(dna)):
dna_string=dna[c:q]
c=c+3
q=q+3
print dna_string
if(dna_string=="atg"):
dna_list.append(get_orf(dna[c-3:]))
print dna_list
答案 1 :(得分:0)
如果我正确理解了您的任务,那么您可以使用split
方法将here与 atg 分隔符一起使用。您将获得子字符串列表,然后对于每个子字符串,您可以获得 taa , tga ,标记子字符串和剪切的出现的索引最小索引的子串。
答案 2 :(得分:0)
在您的方法中,您将移动3步。这就是您无法捕获第二个atg
的原因。关于你的第二个问题,你总是只向get_orf
方法传递3个字符。您需要传递整个字符串才能找到所需的字符。
def get_orf(dna_seq):
for counter, val in enumerate(dna_seq):
if val == "t" and counter < len(dna_seq)-2:
if dna_seq[counter+1:counter+3] in ["aa", "ag"]:
return dna_seq[:counter]
if dna_seq[counter+1:counter+3] == "ga":
return dna_seq[:counter]
return dna_seq
def one_frame(dna):
c = 0
dna_list = []
while c <= len(dna)-3:
dna_string = dna[c:]
if dna_string.startswith("atg"):
dna_list.append(get_orf(dna_string))
c += 1
return dna_list