Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 将字符串切片到列表中_Python - Fatal编程技术网

Python 将字符串切片到列表中

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

我正试图在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顺序=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