我有一个解析等位基因序列的程序。我正在尝试编写一个代码来确定等位基因是否完整。为此,我需要计算参考序列中的中断数。休息由一串' - '表示。如果有多个休息,我希望程序说“不完整的等位基因”。
如何计算如何计算序列中的断点数?
以下是“破损”序列的示例:
>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
我对上述代码的推理是,如果我能找到' - '的起始位置,那么我可以看到它们出现在序列中的次数以及它们是否会破坏序列。但是,我知道上面的代码中存在一些缺陷。
答案 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