我正在研究python和bio序列 我有一个序列。
seq1 = \
... """ atgaaatttatcattgaacgtgagcatctgctaaaaccactgcaacaggtcagtagcccg
... ctgggtggacgccctacgttgcctattttgggtaacttgttgctgcaagtcacggaaggc
... tctttgcggctgaccggtaccgacttggagatggagatggtggcttgtgttgccttgtct
... cagtcccatgagccgggtgctaccacagtacccgcacggaagttttttgatatctggcgt
... ggtttacccgaaggggcggaaattacggtagcgttggatggtgatcgcctgctagtgcgc
... tctggtcgcagccgtttctcgctgtctaccttgcctgcgattgacttccctaatctggat
... gactggcagagtgaggttgaattcactttaccgcaggctacgttaaagcgtctgattgag
... tccactcagttttcgatggcccatcaggatgtccgttattatttgaacggcatgctgttt
... gagaccgaaggcgaagagttacgtactgtggcgaccgatgggcatcgcttggctgtatgc
... tcaatgcctattggccagacgttaccctcacattcggtgatcgtgccgcgtaaaggtgtg
... atggagctggttcggttgctggatggtggtgatacccccttgcggctgcaaattggcagt
... aataatattcgtgctcatgtgggcgattttattttcacatctaagctggttgatggccgt
... ttcccggattatcgccgcgtattgccgaagaatcctgataaaatgctggaagccggttgc
... gatttactgaaacaggcattttcgcgtgcggcaattctgtcaaatgagaagttccgtggt
... gttcggctctatgtcagccacaatcaactcaaaatcactgctaataatcctgaacaggaa
... gaagcagaagagatcctcgatgttagctacgaggggacagaaatggagatcggtttcaac
... gtcagctatgtgcttgatgtgctaaatgcactgaagtgcgaagatgtgcgcctgttattg
... actgactctgtatccagtgtgcagattgaagacagcgccagccaagctgcagcctatgtc
... gtcatgccaatgcgtttgtag"""
seq2 = \
... """ accgtagcatctgctaaaaccagtacgcccg
... ctgggtggacgatgcaacttgttgctgcaagtcacggaaggc
... tctttgcggctgaccggtaccgacttggagatggagatggtggcttgtgttgccttgtct
... cagtcccatgagccgggtgctaccacagtacccgcacggaagttttttgatatctggcgt
... ggtttacccgaaggggcggaaattacggtagcgttggatggtgcatgatcgcctgctagtgcgc
... tctggtcgcagccgtttctcgctgtctaccttgcctgcgattgacttccctaatctggat
... gactggcagagtgaggttgaattcactttaccgcaggctacgttaaagcgtctgattgag
... tccactcagttttcgatgctatttatgtccgttattatttgaacggcatgctgttt
... gagaccgaaggcgaagagttacgtactgtggcgaccgatgggcatcgcttggctgtatgc
... tcaatgcctattggccaggctaattcggtgatcgtgccgcgtaaaggtgtg
... atggagctggttcggttgctggatggtggtgatacccccggcccctgcaaattggcagt
... aataatattcgtgctcatgtgggcgattttattttcacatctaagctggttgatggccgt
... ttcccggattatcgccgcgtattgccgaagaatcctgataaaatgctggaagccggttgc
... gtcatgccaatgcgtttgtag"""
我想知道seq1和seq2中有多少个字符串是相同的,以及它们各自的位置。 这不仅是模式匹配,也是获得位置。 任何人都可以告诉我如何使用python做同样的事情?
答案 0 :(得分:1)
索引器功能会将所有位置作为列表返回
def indexer(s, sub):
positions=[]
pos=0
while True:
pos=s.find(sub,pos+1)
if pos==-1:
return positions
else:
positions.append(pos)
匹配器函数将返回一个字典。 dict中的每个键都是a和b中可用的序列,相应的dict值是2项元组,包含a的所有匹配位置和b的所有匹配位置:
def matcher(a,b):
sequences=set()
for l in range(1,len(a)):
for pos in range(len(a)):
sequences.add(a[pos:pos+l])
for l in range(1,len(b)):
for pos in range(len(b)):
sequences.add(b[pos:pos+l])
matches={}
for seq in sequences:
matches_a=indexer(a,seq)
matches_b=indexer(b,seq)
if result_a and result_b:
matches[seq]=(matches_a,matches_b)
return matches
此示例应该有效:
print matcher('asdfasdfa','asdfasasdfasdfasdfadfasdfdf')
答案 1 :(得分:0)
您可以使用index
:
>>> seq.index(str)
1046
请注意,它会找到你第一次出现的位置。然后,您可以尝试从切片中找到其他事件。
<强> EDITED 强>
当有几个出现时,这样的循环可以起作用:
test = seq1 + ""
try:
while test:
position = test.index(str_)
positions.append(position + last_position)
position += len(str_)
last_position += position
test = test[position:]
except ValueError:
print positions
我们制作seq
字符串的副本,因为我们将使用它。然后,我们继续使用index
方法检查位置,将其存储在positions
中并相应地更新字符串。
[PS]调用变量str
这个坏主意,你要覆盖内置的......
答案 2 :(得分:0)
也许Wikibooks可以帮助您入门?