Соответствующие кодоны с использованием списков, словарей и циклов
Это одна из наиболее сложных проблем, с которыми я сталкивался до сих пор, так что извините за то, что я не предоставил существенной попытки сделать это.
Я хочу программу, которая печатает соответствующие кодоны в формате:
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
Теперь мне нужно избавиться от 9 кодонов от B из каждого ряда справа от двоеточия и оставить только один кодон справа, который совпадает с кодоном от A слева. Как я могу это сделать?
1 ответ
Решение
Тебе это даже не нужно codonsB
список. Кодон отображается на свое антикодонное дополнение 1:1.
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