成对序列比对 bio 中的核苷酸分隔符 python

Nucleotides separator in the pairwise sequence alignment bio python

我有包含不同修饰核苷酸和残基的 RNA 序列。其中一些例如 N79, 8XU, SDG, I.

我想使用 biopython 的 pairwise2.align.localms 将它们成对对齐。是否可以不以字符串形式输入而是以列表形式输入,以便准确说明这些修改后的碱基?

正确的技巧是什么?

Biopython 的 pairwise2 模块适用于字母串,可以是任何东西 - 例如:

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

您可以根据需要设置match/mismatch分。但是,这假定每个字母都是一个单独的元素。

您的问题中不清楚您的示例 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 函数显示效果不是很好。

抱歉添加另一个答案,但我的声誉不足以添加评论...

为了详细说明 peterjc 的回答,接受列表作为输入是 pairwise2 的预期行为(现在我明白它可能有什么用......)。

你是对的,它也与 gap_char 参数有关:由于你将序列作为列表应用,因此间隙字符也必须定义为列表 (["-"])。