如何根据位置列表过滤biopython中的比对列?
根据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
中仅提取这些列呢?
有一个叫bio3d
的R
包可以通过提供列表作为输入来过滤对齐(方法是: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])