1

我是 python 新手,我想知道我正在尝试的是否可行。我在这里有一个 DNA 比对的部分,我想知道对于底部间隙“-”的每个位置,我是否可以识别顶线上的核苷酸。在这里,我希望返回“G”。

到目前为止,我的努力都没有成功。对齐方式是:

ATTCAGGCCTAGCA
:::::  :: ::::
ATTCAA-CCAAGCA

我感谢任何帮助!

4

4 回答 4

1

由于我没有任何有关数据格式的信息,我将告诉您一般过程。分别用第一行和最后一行创建 2 个列表(我想它们是对齐的并且具有相同的长度)并遍历它们。在每一步验证最后一个数组中当前位置的字符是否为“-”,如果是,则打印另一个数组中的字符。

于 2013-10-16T17:16:46.487 回答
1

不确定您的数据是如何保存的。假设它是一个元组中两个长度相等的字符串:

dna_pair = ('ATTCAGGCCTAGCA','ATTCAA-CCAAGCA')

那你可以试试:

def find_align(dna_pair):
    for i in range(len(dna_pair[0])):
        if dna_pair[1][i] == '-':
            return dna_pair[0][i]
于 2013-10-16T17:17:27.370 回答
1
above = 'ATTCAGGCCTAGCA'
below = 'ATTCAA-CCAAGCA'
gap_letters = [above[i] for i,j in enumerate(below) if j=='-']
于 2014-03-25T13:32:45.677 回答
1

你最好使用 biopython 库。它有许多数据类型,旨在操纵 DNA、RNA 和蛋白质序列(比对、树等)。在这种情况下,来自 biopython 包的 AlignIO 肯定会对您有所帮助。

from Bio import AlignIO
# reading your sequences:
alignment = AlignIO.read("my_seq.fa", "fasta")

# length of any alignment row is equal, so number of columns is here

cols = len(alignment[0])
# access to the rows and columns is like in the Numpy array
for col in range(cols):  
    if alignment[ : , col][1] == "-":
        print("gap!")
于 2018-05-29T08:52:44.920 回答