модуль pairwise2 Biopython работает над строками букв, которые могут быть что угодно - например:
>>> from Bio import pairwise2
>>> from Bio.pairwise2 import format_alignment
>>> for a in pairwise2.align.localms("ACCGTN97CT", "ACCG8DXCT", 2, -1, -.5, -.1):
... print(format_alignment(*a))
...
ACCG--TN97CT
||||||||||||
ACCG8DX---CT
Score=9.7
ACCGTN97--CT
||||||||||||
ACCG---8DXCT
Score=9.7
Вы можете установить результаты матча/несоответствия в соответствии с вашими потребностями. Однако это предполагает, что каждая буква является отдельным элементом.
В вашем вопросе неясно, был ли ваш пример N79 одним модифицированным нуклеотидом или тремя? Если вы хотите рассматривать N79 как одну базу, это кажется возможным: я не думаю, что это было намеренно (поэтому я не хотел бы зависеть от этого поведения), но я мог бы обмануть pairwise2 в работе над списками строк:
>>> for a in pairwise2.align.localms(["A", "C", "C", "G", "T", "N97", "C", "T"], ["A", "C", "C", "G", "8DX", "C", "T"], 2, -1, -.5, -.1, gap_char=["-"]):
... print(format_alignment(*a)) ...
['A', 'C', 'C', 'G', 'T', 'N97', 'C', 'T']
||||||||
['A', 'C', 'C', 'G', '8DX', '-', 'C', 'T']
Score=10.5
['A', 'C', 'C', 'G', 'T', 'N97', 'C', 'T']
||||||||
['A', 'C', 'C', 'G', '-', '8DX', 'C', 'T']
Score=10.5
Обратите внимание, что функция format_alignment по умолчанию не отображает это очень хорошо.
Спасибо! Оно работает. У тебя есть другие идеи? – RuslanN
И не могли бы вы вкратце объяснить, как и почему это работает? Я подозреваю, что все дело в аргументе «gap_char»? – RuslanN