2

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

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

我不知道如何从这里开始。

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

4

2 回答 2

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]
于 2013-02-27T09:37:36.700 回答
0

由于我的分数太低,因此无法支持上面 user1 的响应,但这是访问 MSA 列的正确方法。

使用 AlignIO 读取对齐方式:

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

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

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

对齐1[0:1,0:10]

第一个索引 (0:1) 将为您提供对齐的第一行,第二个索引 (0:10) 将为您提供对齐的前 10 个位置。

于 2016-01-29T11:30:53.160 回答