字符串切成一个列表

时间:2017-10-18 05:02:23

标签: python

我试图在one_frame函数()中输入一个字符串:

SQLiteAssetHelper

我要做的是返回一个列表one_frame("catatgdaftgaatg") 。每当我在字符串中找到["atgdaf","atg"]时,我想抓住"atg"以及之后的任何内容,直到我到达"atg"。这是我到目前为止,但它只返回"taa" "tga" "tag"

["atg"]

3 个答案:

答案 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