如何根据位置列表过滤biopython中的比对列?

3 投票
1 回答
1183 浏览
提问于 2025-04-18 07:01

根据biopython的帮助页面这里,我可以根据前10列或后10列来过滤对齐的列,甚至可以使用

align[:, :10] + align[:, -10:]

align是一个MSA对象,它是通过

from Bio import AlignIO
align = AlignIO.read("Clustalw/opuntia.aln", "clustal")

生成的。但是,我想知道是否可以根据一个位置列表来提取列。比如说,如果我有以下列表:

a=[12, 52, 68,45]

有没有办法从对齐的align中仅提取这些列呢?

有一个叫bio3dR包可以通过提供列表作为输入来过滤对齐(方法是:filtered_align = align[, a]),但如果我能在python中使用这个功能就太好了。

谢谢

1 个回答

2

根据Biopython的文档,你可以通过这种方式获取第x列:

align[:, x]

所以,下面的代码应该可以满足你的需求:

from Bio import AlignIO

align = AlignIO.read("Clustalw/opuntia.aln", "clustal")
indices = [12, 52, 68, 45]
columns_as_strings = []

for column in indices:
    columns_as_strings.append(align[:, column])

撰写回答