Python 将字符串切片到列表中
我正试图在one_frame函数()中输入一个字符串: 我要做的是返回一个列表Python 将字符串切片到列表中,python,Python,我正试图在one_frame函数()中输入一个字符串: 我要做的是返回一个列表[“atgdaf”,“atg”]。每当我在字符串中找到“atg”时,我想抓住“atg”以及其后的任何内容,直到我到达“taa”“tga”“tag”。这是我到目前为止得到的,但它只返回[“atg”] def get_orf(dna顺序): 对于dna序列中的x: 如果dna序列中的“taa”或dna序列中的“tag”或dna序列中的“tga”: dna_-seq=dna_-seq.替换(“taa”,“”) dna顺序=d
[“atgdaf”,“atg”]
。每当我在字符串中找到“atg”
时,我想抓住“atg”
以及其后的任何内容,直到我到达“taa”“tga”“tag”
。这是我到目前为止得到的,但它只返回[“atg”]
def get_orf(dna顺序):
对于dna序列中的x:
如果dna序列中的“taa”或dna序列中的“tag”或dna序列中的“tga”:
dna_-seq=dna_-seq.替换(“taa”,“”)
dna顺序=dna顺序替换(“tga”)
dna顺序=dna顺序替换(“标签”)
返回dna_seq
其他:
返回dna_seq
def一个_框架(dna):
c=0
q=3
dna_列表=[]
dna_string=“”
而(q如果我正确理解了您的任务,那么您可以使用atg delimiter中提到的split
方法。您将获得子字符串列表,然后对于每个子字符串,您可以获得taa、tga、标记子字符串出现的索引,并在最小索引处剪切子字符串
dna_list.append(get_orf(dna_string+dna[c:q+3]))
只需更新append函数。。。
由于dna_字符串的长度始终为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
def get_orf(dna顺序):
对于dna序列中的x:
#按顺序打印dna
如果dna序列中的“taa”或dna序列中的“tag”或dna序列中的“tga”:
dna_-seq=dna_-seq.替换(“taa”,“”)
dna顺序=dna顺序替换(“tga”)
dna顺序=dna顺序替换(“标签”)
如果dna中的('atg')如下[3:]:
dna_-seq=“atg”+dna_-seq[3:]替换(“atg”,”)
返回dna_seq
其他:
返回dna_seq
def一个_框架(dna):
c=0
q=3
dna_列表=[]
dna_string=“”
在您的方法中,(q时,移动了3步。这就是为什么您无法捕获第二个atg
。关于第二个问题,您总是只向get\u 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
def get_orf(dna顺序):
对于计数器,枚举中的val(dna顺序):
如果val==“t”且计数器 而c的问题是dna_字符串总是3个字符长。如果字符长度总是3,你将永远不会得到“atgdaf”。。。。
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
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