Oi, pessoal.
Bom, meu problema é simples, porém não consigo resolver:
Eu tenho o DNA de uma doença aleatória e preciso substituir os valores pelo cDNA, onde “A” será substituído por “C”, “C” por “A”, “T” por “G” e “G” por “T”;
EXEMPLO:
DNA do ser vivo gerado aleatoriamente: TCCATGAGTTACCATCTGAG
DNA do ser vivo, complementar invertido: GAACGTCTGGCAACGAGTCT
Eu tentei usar
['A' if x=='C' else x for x in dna]
e funciona, mas quando eu adiciono um “and […]” pra continuar substituindo por outras letras, a letra anterior para de substituir.
Usando and não dá certo, x não pode ser A e C e G e T… ao mesmo tempo no momento da verificação… para isso você deve usar or… mas vai ficar gigante sua instrução, melhor mapear o dna com seus valores invertidos usando dict (dicionário)…
mapa_dna = {
'A': 'C',
'C': 'A',
'G': 'T',
'T': 'G'
}
Depois sim fica facil criar uma lista…
[mapa_dna[x] for x in dna]
1 curtida
Achei uma solução que talvez possa lhe ajudar:
dna = 'TCCATGAGTTACCATCTGAG' #DNA doente
cdna = {'A': 'C', 'C': 'A', 'G': 'T', 'T': 'G'} #mapeamento do cDNA
lista2 = []
#percorre o dna doente
for x in dna:
# se cDNA for igual ao DNA doente substitui cada letra pelo mapeamento cDNA...
if cdna['A'] == x:
lista2.append('A')
elif cdna['C'] == x:
lista2.append('C')
elif cdna['G'] == x:
lista2.append('G')
elif cdna['T'] == x:
lista2.append('T')
else:
lista2.append(x)
#transforma uma lista em uma String sem [] e espaços
novo_dna = ''.join(map(str,lista2))
#imprime as duas sequencias
print('Sequência DNA de doença---: {}'.format(dna))
print('Sequência cDNA------------: {}'.format(novo_dna))
Espero ter ajudado!