首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算蛋白质序列的所有可能的RNA密码子组合

计算蛋白质序列的所有可能的RNA密码子组合
EN

Stack Overflow用户
提问于 2021-01-05 03:34:28
回答 2查看 199关注 0票数 3

我有一个蛋白质序列:

代码语言:javascript
复制
sequence_protein = 'IEEATHMTPCYELHGLRWVQIQDYAINVMQCL'

以及每种蛋白质的tRNA密码子表:

代码语言:javascript
复制
codon_table = {
'A': ('GCT', 'GCC', 'GCA', 'GCG'),
'C': ('TGT', 'TGC'),
'D': ('GAT', 'GAC'),
'E': ('GAA', 'GAG'),
'F': ('TTT', 'TTC'),
'G': ('GGT', 'GGC', 'GGA', 'GGG'),
'H': ('CAT', 'CAC'),
'I': ('ATT', 'ATC', 'ATA'),
'K': ('AAA', 'AAG'),
'L': ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG'),
'M': ('ATG',),
'N': ('AAT', 'AAC'),
'P': ('CCT', 'CCC', 'CCA', 'CCG'),
'Q': ('CAA', 'CAG'),
'R': ('CGT', 'CGC', 'CGA', 'CGG', 'AGA', 'AGG'),
'S': ('TCT', 'TCC', 'TCA', 'TCG', 'AGT', 'AGC'),
'T': ('ACT', 'ACC', 'ACA', 'ACG'),
'V': ('GTT', 'GTC', 'GTA', 'GTG'),
'W': ('TGG',),
'Y': ('TAT', 'TAC'),}

然后我写了一个函数,它会给出每个蛋白质的可能密码子的元组:

代码语言:javascript
复制
tRNA = []
for i in sequence_protein:
    for residue in i:
        tRNA.append(codon_table[residue])

这给出了以下输出:

代码语言:javascript
复制
[('ATT', 'ATC', 'ATA'),
 ('GAA', 'GAG'),
 ('GAA', 'GAG'),
 ('GCT', 'GCC', 'GCA', 'GCG'),
 ('ACT', 'ACC', 'ACA', 'ACG'),
 ('CAT', 'CAC'),
 ('ATG',),
 ('ACT', 'ACC', 'ACA', 'ACG'),
 ('CCT', 'CCC', 'CCA', 'CCG'),
 ('TGT', 'TGC'),
 ('TAT', 'TAC'),
 ('GAA', 'GAG'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG'),
 ('CAT', 'CAC'),
 ('GGT', 'GGC', 'GGA', 'GGG'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG'),
 ('CGT', 'CGC', 'CGA', 'CGG', 'AGA', 'AGG'),
 ('TGG',),
 ('GTT', 'GTC', 'GTA', 'GTG'),
 ('CAA', 'CAG'),
 ('ATT', 'ATC', 'ATA'),
 ('CAA', 'CAG'),
 ('GAT', 'GAC'),
 ('TAT', 'TAC'),
 ('GCT', 'GCC', 'GCA', 'GCG'),
 ('ATT', 'ATC', 'ATA'),
 ('AAT', 'AAC'),
 ('GTT', 'GTC', 'GTA', 'GTG'),
 ('ATG',),
 ('CAA', 'CAG'),
 ('TGT', 'TGC'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG')]

有没有办法计算序列中所有可能的密码子组合(基本上计算元组中所有独立元素的乘积)?并且也计算出在没有首先生成序列的情况下将会有多少产品?

我尝试使用产品功能,但它崩溃了我的笔记本电脑:s

代码语言:javascript
复制
combs = []
for a in product(*tRNA):
    combs.append(a)
print(a)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-05 06:45:20

要计算组合总数,请执行以下操作:

代码语言:javascript
复制
sequence_protein = 'IEEATHMTPCYELHGLRWVQIQDYAINVMQCL'
total_number_combinations = np.prod([ len(codon_table[aa]) for aa in sequence_protein ])

要生成所有可能的组合:

最优雅的是itertools:

代码语言:javascript
复制
from itertools import product

tRNA = [codon_table[aa] for aa in sequence_protein]
for i in product(*tRNA):
    #...do whatever you have to do with these combinations.

但您可以使用自定义函数。只需使用yield,这样您就不会一次生成所有序列,并避免内存问题。

票数 2
EN

Stack Overflow用户

发布于 2021-01-05 03:51:31

代码语言:javascript
复制
import itertools

list_codons = [('ATT', 'ATC', 'ATA'),
 ('GAA', 'GAG'),
 ('GAA', 'GAG'),
 ('GCT', 'GCC', 'GCA', 'GCG'),
 ('ACT', 'ACC', 'ACA', 'ACG'),
 ('CAT', 'CAC'),
 ('ATG',),
 ('ACT', 'ACC', 'ACA', 'ACG'),
 ('CCT', 'CCC', 'CCA', 'CCG'),
 ('TGT', 'TGC'),
 ('TAT', 'TAC'),
 ('GAA', 'GAG'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG'),
 ('CAT', 'CAC'),
 ('GGT', 'GGC', 'GGA', 'GGG'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG'),
 ('CGT', 'CGC', 'CGA', 'CGG', 'AGA', 'AGG'),
 ('TGG',),
 ('GTT', 'GTC', 'GTA', 'GTG'),
 ('CAA', 'CAG'),
 ('ATT', 'ATC', 'ATA'),
 ('CAA', 'CAG'),
 ('GAT', 'GAC'),
 ('TAT', 'TAC'),
 ('GCT', 'GCC', 'GCA', 'GCG'),
 ('ATT', 'ATC', 'ATA'),
 ('AAT', 'AAC'),
 ('GTT', 'GTC', 'GTA', 'GTG'),
 ('ATG',),
 ('CAA', 'CAG'),
 ('TGT', 'TGC'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG')]

counter = 0; max_proc = 1000000; list_seq = []

for x in itertools.product(*list_codons):
    counter += 1
    if counter % max_proc == 0:
        #Do your stuff by slice and clear the list
        list_seq = []
    list_seq.append(x)
    print (counter)
    print (x)

就是这样,没有更多的RAM问题

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65568728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档