我希望能够在Seq对象中搜索Seq对象来解释模糊代码。例如,以下内容应为真:
from Bio.Seq import Seq
from Bio.Alphabet.IUPAC import IUPACAmbiguousDNA
amb = IUPACAmbiguousDNA()
s1 = Seq("GGAAAAGG", amb)
s2 = Seq("ARAA", amb) # R = A or G
print s1.find(s2)
如果考虑歧义代码,答案应该是
>>> 2
但我得到的答案是找不到匹配,或
>>> -1
查看biopython源代码时,似乎没有考虑歧义代码,因为使用private _get_seq_str_and_check_alphabet方法将子序列转换为字符串,然后使用内置字符串方法find()。当然,如果是这样的话," R"歧义代码将被视为文字" R"而不是A或G.
我可以弄清楚如何使用自制方法来做到这一点,但似乎应该在使用其Seq对象的biopython包中处理。我在这里缺少什么。
有没有办法搜索模糊代码的子序列成员资格?
答案 0 :(得分:4)
我可以从Seq.find
的文档中读到:
http://biopython.org/DIST/docs/api/Bio.Seq.Seq-class.html#find
此方法似乎与str.find
方法类似,因为它查找完全匹配。因此,虽然dna序列可以包含歧义代码,但Seq.find()
方法只会在完全子序列匹配时返回匹配。
要做你想做的事,ntsearch
功能可能会起作用: