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

Python 计算蛋白质序列的所有可能的RNA密码子组合,python,tuples,bioinformatics,Python,Tuples,Bioinformatics,我有一个蛋白质序列: sequence_protein = 'IEEATHMTPCYELHGLRWVQIQDYAINVMQCL' 以及每种蛋白质的tRNA密码子表: codon_table = { 'A': ('GCT', 'GCC', 'GCA', 'GCG'), 'C': ('TGT', 'TGC'), 'D': ('GAT', 'GAC'), 'E': ('GAA', 'GAG'), 'F': ('TTT', 'TTC'), 'G': ('GGT', 'GGC', 'GGA', 'GGG

我有一个蛋白质序列:

sequence_protein = 'IEEATHMTPCYELHGLRWVQIQDYAINVMQCL'
以及每种蛋白质的tRNA密码子表:

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'),}
tRNA = []
for i in sequence_protein:
    for residue in i:
        tRNA.append(codon_table[residue])
然后我编写了一个函数,它将给出一个元组,其中包含每个蛋白质的可能密码子:

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'),}
tRNA = []
for i in sequence_protein:
    for residue in i:
        tRNA.append(codon_table[residue])
它给出了这个输出:

[('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

combs = []
for a in product(*tRNA):
    combs.append(a)
print(a)
就这样,再也没有RAM问题了

来计算组合的总数: 要生成所有可能的组合,请执行以下操作: 最优雅的是itertools:

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
,这样您就不会一次生成所有序列,并避免内存问题。

此练习是您家庭作业的一部分吗?因为它太大而崩溃,请不要一次存储所有序列。如果你想对它进行计算,就在循环中进行,正如@azro所说的,它们太多了。事实上,有3757237905408(37.5万亿)这样的序列。除非你能使用超级计算机,否则这对你来说是不可行的,即使你把产品作为一台发电机。@JohnColeman你能详细说明一下计算这个数字的过程吗?谢谢,这里没有RAM问题,但是在所有这些事情上循环是否可行是值得怀疑的。这些代码根本没有用处。^^存在RAM问题。我可以告诉你,我用output=list(itertools.product(*list_codons))@azro-there-is毁了我自己的笔记本电脑,请参见编辑。如果你不能一次管理那么多的组合,你可以用一个max proc var“切片”,你可以在任何地方存储任何东西,然后再组合。如果你不介意处理整个数据集,并且前5000个数据集还可以,那就好了!如果现在没问题,你可以考虑接受答案;)