使用列表、字典和循环匹配密码子

1 投票
1 回答
555 浏览
提问于 2025-04-18 05:25

这是我遇到的比较难的问题之一,所以请原谅我没有提供一个实质性的解决方案。

我想要一个程序,能够以以下格式打印匹配的密码子:

AAA : TTT
GGG : CCC
TTT : AAA
CCC : GGG
    .
    .
    .

这是我目前所做的:

pairs = {'A':'T','C':'G','T':'A','G':'C'}
codonsA = ['AAG', 'TAC', 'CGG', 'GAT', 'TTG', 'GTG', 'CAT', 'GGC', 'ATT', 'TCT']
codonsB = ['TAA', 'CTA', 'AAC', 'TTC', 'AGA', 'CAC', 'CCG', 'ATG', 'GCC', 'GTA']
for A in codonsA:
    print A + ' :',
    for B in codonsB:
        print B,
    print

#OUTPUT:

AAG : TAA CTA AAC TTC AGA CAC CCG ATG GCC GTA
TAC : TAA CTA AAC TTC AGA CAC CCG ATG GCC GTA
CGG : TAA CTA AAC TTC AGA CAC CCG ATG GCC GTA
GAT : TAA CTA AAC TTC AGA CAC CCG ATG GCC GTA
TTG : TAA CTA AAC TTC AGA CAC CCG ATG GCC GTA
GTG : TAA CTA AAC TTC AGA CAC CCG ATG GCC GTA
CAT : TAA CTA AAC TTC AGA CAC CCG ATG GCC GTA
GGC : TAA CTA AAC TTC AGA CAC CCG ATG GCC GTA
ATT : TAA CTA AAC TTC AGA CAC CCG ATG GCC GTA
TCT : TAA CTA AAC TTC AGA CAC CCG ATG GCC GTA

接下来我需要做的是,从每一行冒号右边的B中去掉9个密码子,只留下一个与左边的A匹配的密码子。我该怎么做呢?

1 个回答

1

其实你根本不需要那个 codonsB 列表。一个密码子(codon)和它的反密码子(anticodon)是一一对应的。

def anticodon(codon):
    """returns the anticodon complement for a given codon"""
    return ''.join(pairs[c] for c in codon)

anticodon('AAG')
Out[5]: 'TTC'

如果你需要的话,可以检查一下 codonsA 中的每个元素是否在 codonsB 中有对应的反密码子。

all(anticodon(c) in codonsB for c in codonsA)
Out[6]: True

还有,我觉得你最开始想要的输出是这样的:

for codon in codonsA:
    print '{} : {}'.format(codon,anticodon(codon))

AAG : TTC
TAC : ATG
CGG : GCC
GAT : CTA
TTG : AAC
GTG : CAC
CAT : GTA
GGC : CCG
ATT : TAA
TCT : AGA

撰写回答