es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cálculo entre transición y transversión para dos secuencias con Python.

Escribí el siguiente código para calcular la relación entre transiciones y transversiones, es decir, la división entre el total de transiciones y el total de transversiones que ocurren en dos cadenas (cuando una letra se cambia por otra, dependiendo del caso).

transición = {‘A’:’G’, ‘G’:’A’, ‘T’:’C’, ‘C’:’T’}

transversión = {‘A’:(‘T’,’C’), ‘G’:(‘T’,’C’), ‘T’:(‘A’,’G’), ‘C’:(‘A’,’G’)}

def rel_trans(s1, s2):
x = 0
y = 0
for i,j in zip(s1, s2):
if transición[i] == j:
x += 1
elif j in transversión[i]:
y += 1
return (x/y)

s1 = ”’GCAACGCACAACGAAAACCCTTAGGGACTGGATTATTTCGTGATCGTTGTAGTTATTGGAAGTACGGGCATCAACCCAGTT”’
s2 = ”’TTATCTGACAAAGAAAGCCGTCAACGGCTGGATAATTTCGCGATCGTGCTGGTTACTGGCGGTACGAGTGTTCCTTTGGGT”’

print(rel_trans(s1, s2))

El problema es que este código solo funciona en cadenas de una sola línea, pero cuando intento ejecutarlo en una de múltiples líneas, arroja un error. Es decir, quiero que funcione para mí en lo siguiente:

s1 = ”’TTTTGTCATTTTGCCTCGTCGTCAGGAATATTGGGACGAATTGGACTCTACT
TCTGTGGGCTGAGCCGGTTCACCCATTGACGAGTGCTAGTCACAGATGAATTACAATGAA
TTGATTTATG”’

s2 = ”’CCTTGTAAGTACGCGTAGCCTCCAGGAACTTTTAGGCGAATTGTACGTCACC
TCCGGGAGCCGGGCCGGTTGATCCTTTGACAAGTCCTCACAGATGTGTCACAACCAA
TTGATCTG”’

¿Podría alguien decirme qué modificar? parece que zip es el problema.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para que el código funcione con cadenas de varias líneas, debes modificar la forma en que estás leyendo las cadenas. Primero puedes eliminar cualquier carácter de espacio en blanco de las cadenas utilizando el método replace() y luego iterar a través de los caracteres de las cadenas utilizando un bucle. Aquí está el código modificado:

    s1 = """
    TTTTGTCATTTTGCCTCGTCGTCAGGAATATTGGGACGAATTGGACTCTACT
    TCTGTGGGCTGAGCCGGTTCACCCATTGACGAGTGCTAGTCACAGATGAATTACAATGAA
    TTGATTTATG""".replace('\n', '')
    
    s2 = """
    CCTTGTAAGTACGCGTAGCCTCCAGGAACTTTTAGGCGAATTGTACGTCACC
    TCCGGGAGCCGGGCCGGTTGATCCTTTGACAAGTCCTCACAGATGTGTCACAACCAA
    TTGATCTG""".replace('\n', '')
    
    def rel_trans(s1, s2):
        x = 0
        y = 0
        for i, j in zip(s1, s2):
            if transition[i] == j:
                x += 1 
            elif j in transversion[i]:
                y += 1
        return (x/y)
    
    print(rel_trans(s1, s2))
    

    En este código, el método replace() se utiliza para eliminar los caracteres de salto de línea tanto de s1 como de s2. Luego, las cadenas modificadas se pasan a la función rel_trans(), que opera caracter por caracter y calcula la proporción de transiciones a transversiones como antes.

    Ten en cuenta que, dado que las cadenas ahora están en una sola línea cada una, no necesitas las comillas triples al principio y al final de las cadenas.

Comments are closed.