Python 一般序列比对

Python 一般序列比对,python,biopython,Python,Biopython,我正在写一个程序,它被设计为匹配两个序列。我已经有了两个包含SeqRecord对象的列表,后缀F和R是分开的。现在,我想从列表F中选择一个序列,并从列表R中找到最相似的序列。我想根据seq_record.id进行搜索。然后对这两个相似的序列进行全局匹配。并对列表f中的每个序列重复相同的步骤 下面是列表f中的示例id名称:BIE-1_ITS5;BIE-2_ITS5;BIE-3_ITS5;KAZ-5_-ITS5 这里来自列表r:BIE-1_ITS4;BIE-2_ITS4;BIE-3_-ITS4;KA

我正在写一个程序,它被设计为匹配两个序列。我已经有了两个包含SeqRecord对象的列表,后缀F和R是分开的。现在,我想从列表F中选择一个序列,并从列表R中找到最相似的序列。我想根据seq_record.id进行搜索。然后对这两个相似的序列进行全局匹配。并对列表f中的每个序列重复相同的步骤

下面是列表f中的示例id名称:BIE-1_ITS5;BIE-2_ITS5;BIE-3_ITS5;KAZ-5_-ITS5

这里来自列表r:BIE-1_ITS4;BIE-2_ITS4;BIE-3_-ITS4;KAZ-5_-ITS4

例如,对于id号为BIE-1_ITS5的序列,关键点是在列表r中找到序列BIE-1_ITS4,并对其进行全局序列对齐

将第一个与第一个、第二个与第二个匹配不是首选选项,因为可能存在没有任何对的序列


感谢您的回答

我使用了字符串匹配算法来查找两个字符串的相似性分数,并找到了最相似的字符串:

导入difflib 将numpy作为np导入 def getScore(项目1、项目2): 返回浮点(difflib.SequenceMatcher(无、项1、项2).ratio()*100) def getMostSimilar(f,r): 结果={} 对于f中的i: 分数=[0]*len(r) 对于枚举(r)中的ind,j: 分数[ind]=getScore(i,j) 打印(分数) ind=np.argmax(分数) 结果[i]=r[ind] 返回结果 f=['BIE-1_-ITS5'、'BIE-2_-ITS5'、'BIE-3_-ITS5'、'KAZ-5_-ITS5'] r=['BIE-1_-ITS4'、'BIE-2_-ITS4'、'BIE-3_-ITS4'、'KAZ-5_-ITS4'] 打印(getMostSimilar(f,r)) 我得到了以下结果:

[90.0,80.0,80.0,50.0]
[80.0, 90.0, 80.0, 50.0]
[80.0, 80.0, 90.0, 50.0]
[50.0, 50.0, 50.0, 90.0]
{'BIE-1_ITS5':'BIE-1_ITS4',
‘BIE-2_-ITS5’:‘BIE-2_-ITS4’,
‘BIE-3_-ITS5’:‘BIE-3_-ITS4’,
‘KAZ-5_-ITS5’:‘KAZ-5_-ITS4’}
印刷词典是最相似项目的映射


注意:这不会返回一个唯一的映射,因为这需要更多关于如何映射的信息,即先到先得或最大匹配分数(需要有平局情况)

-您能解释一下全局序列对齐是什么意思吗?-另外,使用列表
f
中的id,您如何确定在列表
r
中查找的id?是否有规则确定最相似的id?也许只是字符串比较?我是说DNA序列匹配。预先指定每个对象的ID。我想在两个列表中找到最相似的ID,然后从中匹配序列。如果有帮助,请接受答案