我希望能够在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程序包中进行处理。这里有我想念的东西吗?

有没有一种方法可以搜索含歧义代码的子序列成员资格?

最佳答案

从这里我可以从Seq.find的文档中读取的内容:

http://biopython.org/DIST/docs/api/Bio.Seq.Seq-class.html#find

看起来此方法的工作方式类似于str.find方法,因为它查找的是完全匹配。因此,虽然dna序列可以包含歧义代码,但是Seq.find()方法仅在精确子序列匹配时才返回匹配项。

要执行您想做的事情,ntsearch函数可能会起作用:

Search for motifs with degenerate positions

关于python - Biopython是否可以执行Seq.find()解决歧义代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32192933/

10-15 18:33