GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Substituir String em Lista

list
string
python
Tags: #<Tag:0x00007f2600373bb0> #<Tag:0x00007f2600373a48> #<Tag:0x00007f2600373908>

#1

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.


#2

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]

#3

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!