从多个序列对齐器输出相同的列

2024-04-29 13:52:04 发布

您现在位置:Python中文网/ 问答频道 /正文

你好。我正在编写一个函数来查找对齐的相同列,然后将这些列存储在字典中,这样键应该是列(作为字符串),而值是一个包含列索引的列表。我有点困难。我当前的代码只能进行一个对齐:

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

我不知道怎么从这里开始。在

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


Tags: 函数字符串代码fromimportid列表字典
2条回答

您可以使用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]

由于我的分数太低,无法对上面user1的响应进行投票,但这是访问MSA列的正确方法。在

使用AlignIO读取对齐:

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

然后按照user1的帖子中的描述创建字典。在

然后,您可以访问MSA的列,从而:

align1[0:1,0:10]

其中第一个索引(0:1)将给出路线的第一条线,第二个索引(0:10)将给出路线的前10个位置。在

相关问题 更多 >