解析列表列表中的项目,以三个为一组,并提取阅读框之间的片段。 (又名 DNA 外显子转录)

Parsing items in a list of lists, in groups of three, and extract a fragment between a reading frame. (AKA DNA exon transcription)

我正在尝试找到一种方法来读取一组列表中的项目,三个一组,并找到 3 个项目的组合(密码子)以确定片段的开头和另一个 3 个项目的组合找到片段的结尾(终止密码子)。

因此,阅读框架和列表应该被程序这样读取:

列表 1:XXXXX-开始-感兴趣的片段-停止-XXXXXXX

我想做的只是提取感兴趣的片段并将其附加到另一个列表中,然后删除其余部分。

这是一个更具体的例子:

起始密码子:ATG

终止密码子:TAG

gene_1='ACGGACTATTC'

gene_2= 'GGCCATGAGTAACGCATAGGGCCC

gene_3=GGGCCCATGACGTACTAGGGGCCCATGCATTCA标签

因此,第一个列表不包含任何感兴趣的片段,而第二个包含 1,第三个包含 2。我试图摆脱这些阅读框架之外的所有内容,并将这些感兴趣的片段附加到应该看起来像这样的列表。

frag_int = ['AGTAACGCA', 'ACGTAC', 'CATTCA']

这是我目前拥有的:

#这些是str 基因列表=[]

gene_1= 'A','C','G','G','A','C','T','A','T','T','C'
gene_2= 'G','G','C','C','A','T','G','A','G','T','A','A','C','G','C','A','T','A','G','G','G','C','C','C'
gene_3='G','G','G','C','C','C','A','T','G','A','C','G','T','A','C','T','A','G','G','G','G','C','C','C','A','T','G','C','A','T','T','C','A','T','A','G'

genelist.append(gene_1)
genelist.append(gene_2)
genelist.append(gene_3)

def transcription(ORF):
    mRNA= ''
    for i in range(0, len(ORF), 3):
        codon= ORF[i:i+3]
        if codon != 'ATG':
            next(codon)
            if codon == 'ATG':
                mRNA=codon.transcribe()
                if codon == 'TAG':
                    break
    return(mRNA)

mRNAs=[]
for gene in genelist:
    for codon in gene:
        mRNA= transcription(codon)
        mRNAs.append(mRNA)
print(mRNAs)

但这并没有真正回馈任何东西,我想知道是不是代码太冗余了,我真的不需要在这里定义一个函数,你知道更好的方法吗? 谢谢!!

与其列出每个氨基酸,不如尝试将基因转换为字符串并使用正则表达式查找起始和结束位点? 难道3号基因不是多顺反子基因而是带外显子的基因吗?

像这样:

import re

gene = 'GGGCCCATGACGTACTAGGGGCCCATGCATTCATAG'

rna = re.findall('ATG(.+?(?=TAG))', gene)

谢谢大家的意见,我去了生物信息学部分,得到了@terdon的帮助。 这是我在问题中描述的最基本的方法,但是,请注意,如果有人试图找到 ORFS 和转录基因,在带有 python 的程序中,需要考虑一些生物学规则,并且阅读和终止密码子应该被考虑,然而,这只是一个关于如何开始构建代码的例子: 另外,请注意此代码使用 biopython

从 Bio.Seq 导入序列 从 Bio.Seq 导入转录

genelist=[]

gene_1= 'A','C','G','G','A','C','T','A','T','T','C'
gene_2= 'G','G','C','C','A','T','G','A','G','T','A','A','C','G','C','A','T','A','G','G','G','C','C','C'
gene_3='G','G','G','C','C','C','A','T','G','A','C','G','T','A','C','T','A','G','G','G','G','C','C','C','A','T','G','C','A','T','T','C','A','T','A','G'

genelist.append(gene_1)
genelist.append(gene_2)
genelist.append(gene_3)

def transcription(ORF):
    mRNA= ''
    foundStart = False
    foundEnd = False
    for i in range(0, len(ORF), 3):
        codon= "".join(ORF[i:i+3])
        if codon == 'ATG' and not foundStart:
            foundStart = True
        if foundStart and not foundEnd:
            cc=transcribe(codon)
            mRNA = mRNA + transcribe(codon)
        if codon == 'TAG':
            foundEnd = True
       
    return(mRNA)

mRNAs=[]
for gene in genelist:
    mRNA = transcription(gene)
    mRNAs.append(mRNA)
print(mRNAs)