Полагаю, первый пробел в A
является опечаткой?В противном случае выравнивание выглядело бы иначе.
Итак, предполагая:
A = 'EEEEE HHH HHH EEEEE'
B = 'EEE EEEE HHH'
alignment = """EEE-------EE--- HHH HHH EEEEE
||| || |||||||||
EEE EEEE HHH--------------------------
Score=29.6"""
Мы могли бы написать функцию compare()
:
def compare(align, matches, original):
result = []
index = -1
for char, match in zip(align, matches):
if char == '-':
index += 0
else:
index += 1
if match == '|':
assert original[index] == char
result.append(index)
return result
А затем
align_A, matches, align_B, score = alignment.splitlines()
print(compare(align_A, matches, A))
Дает [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
.Быстрая визуальная проверка подтверждает это: первые 14 символов A
совпадают (5 E
с, 6 пробелов и 3 H
с).И
print(compare(align_B, matches, B))
дает [0, 1, 2, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23]
.