使用字典匹配密码子

2024-09-30 16:26:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个函数codon_pairs(pairs, codonsA, codonsB),它接受三个参数:字典pairs和两个列表codonsA和{}。字典包含碱基对,密码子列表包含密码子序列。我试图为codonsB中的每个密码子序列找到codonsB中的互补密码子序列,并返回如下匹配对:

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', 'CCC', 'CCG', 'GTA']

print(codons_pairs(pairs, condonsA, codonsB))

[('AAG', 'TTC'), ('GAT', 'CTA'), ('TTG', 'AAC'), ('CAT', 'GTA'), ('GGC',   'CCG'), ('ATT', 'TAA'), ('TCT', 'AGA')]

二元组中的第一项是来自codonsA的密码子,第二项是来自codonsB的匹配密码子。例如,序列AAGcodonsA[0])和TCCcodonsB[3])是匹配对,因为A的碱基对是T,G的碱基对是C,在pairs字典中突出显示。在

另一方面,如果找不到匹配对,它将从最终结果中忽略。在

到目前为止,我得到的是:

^{pr2}$

我只是不知道如何检查codonsA和{}之间的对,就字典而言。任何帮助都将不胜感激。在


Tags: 列表字典序列attcat密码子gatpairs
1条回答
网友
1楼 · 发布于 2024-09-30 16:26:46

codonsB转换为set()以进行快速检查(O(1)成员身份测试,无需嵌套循环),然后通过pairs映射映射来自A的每个密码子,并根据集合测试结果:

def codons_pair(pairs, codonsA, codonsB):
    codonsB = set(codonsB)
    for codon in codonsA:
        complement = ''.join([pairs[base] for base in codon])
        if complement in codonsB:
            yield (codon, complement)

找到它们的生成函数。您可以使用list()函数将生成的生成器转换为一个列表,或者只迭代该函数。在

演示:

^{pr2}$

相关问题 更多 >