Python - cortar secuencia en tramos

 
Vista:
sin imagen de perfil
Val: 42
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

cortar secuencia en tramos

Publicado por Eduardo (25 intervenciones) el 22/08/2018 19:13:21
Hola a todos, quiero cortar una secuencia en unos 4 tramos dependiendo del len, he intentado algo pero creo que no es lo correcto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
adn=("TGGTTGCAAGAGATCATGACAGGGGGAATTGGTTGAAAATAAATATATCGCCAGCAGCAGAGATTACGTCTGGTTGCAAGAGATCATGACAGGGGGAATTGGTTGAAAATAA")
 
 
t= l // 4  #redondeo la división 
 
for i in adn:
 
    sec1=adn[0:t]
    sec2=adn[t:t*2]
    sec3=adn[t*2:t*3]
 
print sec1
print sec2
print sec3


creo que podría haber otra solución usando talvez con un bucle interno? pero python no tiene do..while. Necesitaría hacer lo mismo para secuencias de miles de letras cortándola de 100 en 100 o de 500 en 500 para graficar el porcentaje de GC de tramo en tramo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
sec1=adn[0:100]
g1=sec1.count("G")
c1=sec1.count("C")
p1= 100*(g1+c1)/float(len(adn))
 
 
sec2=adn[101:200]
g2=sec2.count("G")
c2=sec2.count("C")
p2= 100*(g2+c2)/float(len(adn))
 
 
sec3=adn[201:300]
g3=sec3.count("G")
c3=sec3.count("C")
p3= 100*(g3+c3)/float(len(adn))
 
 
sec4=adn[301:400]
g4=sec4.count("G")
c4=sec4.count("C")
p4= 100*(g4+c4)/float(len(adn))
 
 
sec5=adn[401:500]
g5=sec5.count("G")
c5=sec5.count("C")
p5= 100*(g5+c5)/float(len(adn))
 
sec6=adn[501:540]
g6=sec6.count("G")
c6=sec6.count("C")
p6= 100*(g6+c6)/float(len(adn))
 
 
print p1,p2,p3,p4,p5,p6
 
plt.plot([100,200,300,400,500,600],[p1,p2,p3,p4,p5,p6])
plt.ylabel('Porcentaje')
plt.xlabel('Nucleotidos')
plt.show()

Alguien podría darme una mano por favor?¿Cómo uso otro bulce para reducir o simplificar todo este código, es decir no escribir[ t:t*2],[t: t*3] que me parece no es correcto y lo haría muy largo?

Muchas gracias y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.436
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

cortar secuencia en tramos

Publicado por xve (1644 intervenciones) el 22/08/2018 21:54:12
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.275
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

cortar secuencia en tramos

Publicado por tincopasan (622 intervenciones) el 23/08/2018 00:25:52
no hay formas correctas o incorrectas, solo distintas.
usando tu primer código, solo modificando la lógica:
1
2
3
4
5
6
7
8
9
10
11
#-*- coding: utf -8 -*-
adn=("TGGTTGCAAGAGATCATGACAGGGGGAATTGGTTGAAAATAAATATATCGCCAGCAGCAGAGATTACGTCTGGTTGCAAGAGATCATGACAGGGGGAATTGGTTGAAAATAA")
t= len(adn) // 4  #redondeo la división 
 
sec1=adn[0:t]
sec2=adn[t:t+t]
sec3=adn[t*3:]
 
print (sec1)
print (sec2)
print (sec3)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jesus
Val: 6
Ha aumentado su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

cortar secuencia en tramos

Publicado por Jesus (4 intervenciones) el 23/08/2018 01:07:05
Nothing here!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

cortar secuencia en tramos

Publicado por antonio (4 intervenciones) el 23/08/2018 23:42:57
1
2
3
4
5
6
7
8
9
10
11
12
adn="TGGTTGCAAGAGATCATGACAGGGGGAATTGGTTGAAAATAAATATATCGCCAGCAGCAGAGATTACGTCTGGTTGCAAGAGATCATGACAGGGGGAATTGGTTGAAAATAA")
 
 
longitud_secuencia=10
t= len(adn) // longitud_secuencia  #redondeo la división 
 
for i in range(t):
	print(adn[(longitud_secuencia*(i+1))-longitud_secuencia:longitud_secuencia*(1+i)])
print(adn[longitud_secuencia*(i+1):len(adn)])
 
 
#si  cambias la longitud de la secuencia te dará las secuencias con la longitud que tu desees. Ademas si en lugar de un print() creas una tupla y a cada vulta de bucle añades el resultado a la tupla podrás almacenarlas y no tener que ejecutar el algoritmo cada vez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 42
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

cortar secuencia en tramos

Publicado por Eduardo (25 intervenciones) el 24/08/2018 09:22:38
Vale muchas gracias, es justo lo que necesitaba, voy a darle vueltas para entender
(longitud_secuencia*(i+1))-longitud_secuencia:longitud_secuencia*(1+i)

un cordial saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar