gko*_*oul 1 python combinations combinatorics biopython python-3.x
我有以下字典,其中包含每个氨基酸(键|字母)所有可能的密码子(值|三联体)。这本字典在生物信息学中也被称为“DNA密码子表”。
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'),}
Run Code Online (Sandbox Code Playgroud)
我想为给定的“键”序列创建所有可能的三元组组合。例如,FMW序列应具有以下两个结果: TTTATGTGG和TTCATGTGG。组合的数量应该是字典中每个键的值的数量的乘积。在我们的例子中,FMW应该是 2*1*1 = 2 个组合。
对于 10 个(或更多)字母的序列进行此类计算,哪种方法最 Pythonic、最有效?Biopython 包中是否有已经实现的方法?
提前致谢。
假设seq这里是您拥有的密钥列表。如果您有任何其他形式(例如 a string),它可以轻松地被视为char数组并分解为seq列表。一旦你这样做了,你就会非常itertools出色地完成你想要的事情。这是完整的代码 -
import itertools
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'),}
seq = ['F', 'M', 'W']
t1, t2, t3 = [ list(codon_table[key]) for key in seq ]
print(list(itertools.product(t1, t2, t3)))
Run Code Online (Sandbox Code Playgroud)
输出
[('TTT', 'ATG', 'TGG'), ('TTC', 'ATG', 'TGG')]
Run Code Online (Sandbox Code Playgroud)
运算输出
此外,如果您想要完全按照您想要的方式输出,而不是最后一个打印语句,您可以选择 -
output = list(itertools.product(t1, t2, t3))
print(output)
output_flat = [ ''.join(a) for a in output ]
print(output_flat)
Run Code Online (Sandbox Code Playgroud)
这输出 -
['TTTATGTGG', 'TTCATGTGG']
Run Code Online (Sandbox Code Playgroud)
希望有帮助。干杯!
| 归档时间: |
|
| 查看次数: |
1553 次 |
| 最近记录: |