查找序列中的中断数

时间:2016-08-08 14:46:08

标签: python string python-2.7

我有一个解析等位基因序列的程序。我正在尝试编写一个代码来确定等位基因是否完整。为此,我需要计算参考序列中的中断数。休息由一串' - '表示。如果有多个休息,我希望程序说“不完整的等位基因”。

如何计算如何计算序列中的断点数?

以下是“破损”序列的示例:

>DQB1*04:02:01
------------------------------------------------------------
------------------------------------------------------------
------------------------------------------------------------
--ATGTCTTGGAAGAAGGCTTTGCGGAT-------CCCTGGAGGCCTTCGGGTAGCAACT
GTGACCTT----GATGCTGGCGATGCTGAGCACCCCGGTGGCTGAGGGCAGAGACTCTCC
CGAGGATTTCGTGTTCCAGTTTAAGGGCATGTGCTACTTCACCAACGGGACCGAGCGCGT
GCGGGGTGTGACCAGATACATCTATAACCGAGAGGAGTACGCGCGCTTCGACAGCGACGT
GGGGGTGTATCGGGCGGTGACGCCGCTGGGGCGGCTTGACGCCGAGTACTGGAATAGCCA
GAAGGACATCCTGGAGGAGGACCGGGCGTCGGTGGACACCGTATGCAGACACAACTACCA
GTTGGAGCTCCGCACGACCTTGCAGCGGCGA-----------------------------
-----------------------------------------------------
------------------------------------------------------------
------------------------------------------------------------
---GTGGAGCCCACAGTGACCATCTCCCCATCCAGGACAGAGGCCCTCAACCACCACAAC
CTGCTGGTCTGCTCAGTGACAGATTTCTATCCAGCCCAGATCAAAGTCCGGTGGTTTCGG
AATGACCAGGAGGAGACAACTGGCGTTGTGTCCACCCCCCTTATTAGGAACGGTGACTGG
ACCTTCCAGATCCTGGTGATGCTGGAAATGACTCCCCAGCGTGGAGACGTCTACACCTGC
CACGTGGAGCACCCCAGCCTCCAGAACCCCATCATCGTGGAGTGGCGGGCTCAGTCTGAA
TCTGCCCAGAGCAAGATGCTGAGTGG----CATTGGAGGCTTCGTGCTGGGGCTGATCTT
CCTCGGGCTGGGCCTTATTATC--------------CATCACAGGAGTCAGAAAGGGCTC
CTGCACTGA---------------------------------------------------
------------------------------------------------------------
------------------------------------------------------------
------------------------------------------------------------

我到目前为止的代码如下:

idx=[]
for m in range(len(sequence)):
    for n in re.finditer('-',sequence[0]): 
        idx.append(n.start())
counter=0
min_val=[]
for n in range(len(idx)):
    if counter==idx[n]:
        counter=counter+1
    elif counter !=0:
        min_val.append(idx[n-1])
        counter=0

我对上述代码的推理是,如果我能找到' - '的起始位置,那么我可以看到它们出现在序列中的次数以及它们是否会破坏序列。但是,我知道上面的代码中存在一些缺陷。

3 个答案:

答案 0 :(得分:1)

您可以过滤掉所有' - '字符并基于剩余段数确定休息次数。

str_list = filter(None, sequence.split('-'))
if len(str_list) > 2:
    return "Incomplete Allele"
else:
    return "Complete Allele"

答案 1 :(得分:0)

我认为应该这样做:

def test(sequence):
    sequence = ''.join(sequence.splitlines()[1:]) # remove first line (header and line breaks)
    S = [segments for segments in sequence.split('-') if block != '']
    if len(S)>2: # len(S) should be the number of remaining segments
        print "Incomplete Allele."

答案 2 :(得分:0)

似乎您可以计算-+的出现次数,即一系列一个或多个 -符号。唯一的问题是换行符,但你可以将它们合并到正则表达式中,或者在匹配之前拆分并加入字符串。

>>> sequence = """>DQB1*04:02:01....."""
>>> joined = ''.join(sequence.splitlines())
>>> sum(1 for m in re.finditer("-+", joined))
7

注意:这包括序列开头和结尾的-

或者改变方法:不计算差距,而是计算群体:

>>> sum(1 for m in re.finditer("[GATC]+", joined))
6