计算蛋白质序列的所有可能的 RNA 密码子组合
calculate all possible combinations of RNA codons for a protein sequence
我有一个蛋白质序列:
sequence_protein = 'IEEATHMTPCYELHGLRWVQIQDYAINVMQCL'
和每个蛋白质的 tRNA 密码子 table:
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)
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 问题
计算总组合数:
sequence_protein = 'IEEATHMTPCYELHGLRWVQIQDYAINVMQCL'
total_number_combinations = np.prod([ len(codon_table[aa]) for aa in sequence_protein ])
要生成所有可能的组合:
最优雅的是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
这样您就不会一次生成所有序列并避免内存问题。
我有一个蛋白质序列:
sequence_protein = 'IEEATHMTPCYELHGLRWVQIQDYAINVMQCL'
和每个蛋白质的 tRNA 密码子 table:
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)
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 问题
计算总组合数:
sequence_protein = 'IEEATHMTPCYELHGLRWVQIQDYAINVMQCL'
total_number_combinations = np.prod([ len(codon_table[aa]) for aa in sequence_protein ])
要生成所有可能的组合:
最优雅的是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
这样您就不会一次生成所有序列并避免内存问题。