从多个序列比对中输出相同的列

2 投票
2 回答
649 浏览
提问于 2025-04-17 15:42

你好。我正在写一个函数,用来找到相同的对齐列,然后把这些列存储在一个字典里。字典的键应该是列名(以字符串形式),而值则是一个列表,里面包含这些列的索引。我在这方面遇到了一些困难。我的当前代码只能处理一个对齐:

from Bio.Align import MultipleSeqAlignment
from Bio.Alphabet import IUPAC, Gapped, generic_dna
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
align1 = MultipleSeqAlignment([
          SeqRecord(Seq("ACTGCTAGCTAG", generic_dna), id="Alpha"),
          SeqRecord(Seq("ACT-CTAGCTAG", generic_dna), id="Beta"),
          SeqRecord(Seq("ACTGCTAGDTAG", generic_dna), id="Gamma"),
      ])
print align1.format("phylip")

我不知道接下来该怎么做。

输出应该是一个字典,里面包含相同的对齐列作为键,而相同列的索引作为值。

2 个回答

0

由于我的分数太低,无法给上面用户1的回答点赞,但那确实是访问MSA(多序列对齐)列的正确方法。

首先,使用AlignIO读取你的对齐文件:

align1 = AlignIO.read(open("alignment.aln"), "clustal")

然后,按照用户1的帖子中的描述创建一个字典。

接下来,你可以这样访问MSA的列:

align1[0:1,0:10]

这里,第一个索引(0:1)会给你对齐的第一行,而第二个索引(0:10)会给你对齐的前10个位置。

0

你可以通过 align1[:,index] 来访问某一列。

要创建字典,可以使用这个循环:

dict = {}
for i in range(0,align1.get_alignment_length()):
   if align1[:,i] in dict:
      dict[align1[:,i]].append(i)
   else:
      dict[align1[:,i]] = [i]

撰写回答