如何使用python映射来自两个不同字符串的匹配字符的索引?

问题描述

给定两个字符串,A和B的长度各不相同(它们可能具有相同的长度),当A中的字符与B中的字符匹配时,我想将B的索引映射到A的索引。

# Example 1
string A: 'DsgiAKKBCLIDFCFCE'
string B: 'ABDCEF'
answer:   {0:4,1:7,2:11,3:13,4:16}

# Example 2
string A: 'ECDABF'
string B: 'ABDCEF'
answer:   {0:3,1:4,5:5}

# Example 3
string A: 'GKVRVNAL'
string B: 'TFTGKVRNHNLGDSVNALT'
answer: {3:0,4:1,5:2,6:3,14:4,15:5,16:6,17:7}

我描述代码工作方式的方式是这样的:

# For example 1
string A: DsgiAKKBCLIDFCFCE
B match:      A  B   D C  E
B index:      0  1   2 3  4

F不存在,因为在字符串A中的E之后找不到它。

# For example 2
string A: ECDABF
B match:     ABF
B index:     1,2,5

# For example 3
string A: GKVRVNAL
B match:  GKVRVNAL
B index:  3,4,5,6,14,15,16,17

解决方法

说实话,我不完全理解您的问题。另外,不应使用biopython对其进行标记,因为根本没有使用该库。

我尝试完成您的任务

a = 'ABDCE'
b = 'DSGIAKKBCLIDFCFCE'

i = 0
result = []
for c_a in a:
    while i < len(b):
        if b[i] == c_a:
        result.append(i)
        break
    i += 1

print(result)

您以[4,7,11,13,16]为例。我决定使用列表而不是字典,因为索引无论如何都是从0开始的连续数字。