一般序列比对

2024-04-29 10:07:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序,它被设计为匹配两个序列。我已经有了两个包含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,并对其进行全局序列对齐

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

谢谢你的回答


Tags: 对象程序id列表步骤序列seqrecordrecord
1条回答
网友
1楼 · 发布于 2024-04-29 10:07:30

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

import difflib
import numpy as np

def getScore(item1,item2):
    return float(difflib.SequenceMatcher(None, item1, item2).ratio()*100)

def getMostSimilar(f,r):
    result={}
    for i in f:
        scores=[0]*len(r)
        for ind,j in enumerate(r):
            scores[ind]=getScore(i,j)
        print(scores)
        ind = np.argmax(scores)
        result[i]=r[ind]
    return result

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']

print(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'}

印刷词典是最相似项目的映射

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

相关问题 更多 >