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.
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:En este código, el método
replace()
se utiliza para eliminar los caracteres de salto de línea tanto des1
como des2
. Luego, las cadenas modificadas se pasan a la funciónrel_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.