jueves, 14 de marzo de 2013

Rebanar listas y strings en Python 3



Hace un tiempo hable de esto un poco,de rebanar como le suelen decir a esto o hacer un split o tambien se le conoce como particionado ,el hecho es que me preguntaron sobre este tema porque no explique muy bien en una entrada pasada y bueno es un tema un poco raro ya que no es complicado pero lleva una sintaxis algo extraña,pero cuando nos familiaricemos no hay mas que ver bien lo que deseamos hacer:

Por ejemplo podemos voltear una cadena con una orden de particionado:

string = "Cadena de Texto :D"

print (string[::-1]) 



Y nos voltea la cadena :O



Bueno como ven se ve un poco rara la sintaxis,pero solo consta de tres partes:

[inicio:final:stride]

Y bueno consta con negativos y positivos:

negativo => hacia atrás

positivo => hacia adelante

positivo => 2 hacia adelante

negativo = -2 hacia atrás

1 => toda la lista o string, también cuenta con negativo

0 => Primer valor de la lista o string

He visto que al hablar de esto en algunos sitios,de la "competencia" de tiempo de tux solo se refieren al particionado como dos valores, el inicio y final,pero no,hay tres si contamos stride(espacio o paso) de aquí en adelante stride(y suena bien :P).Así que aprenderemos a usar estos tres declaradores de indices para hacer la llamada rebanada o particion,para en otro tutorial poder aprender a usar funciones anónimas

Bien, como he dicho en las particiones podemos usar números positivos o negativos (aquellos como -1), esto lo hace python para saber que es lo que queremos,pero al mismo tiempo al saber lo que queremos se dificulta el trabajo de indicarle a python lo que queremos hacer,por ejemplo queremos solo los 5,6 y 7 de una lista de 10 dígitos :O, fácil:

Pero primero a definir nuestra lista:

Podemos así:

numeros = [ 1,2,3,4,5,6,7,8,9,10 ] 

O también así

# Python 3 range(1,11) # Python 2

numeros = list(range(1,11)) # Usare este

Y imprimimos

print (numeros[4:7]) 

Script :


#!/usr/bin/env python3

numeros = list(range(1,11))

print (numeros[4:7])

Y el resultado es :




Cabe destacar que esto:

[inicio:final:stride]

inicio no se incluye en el conteo,por ejemplo si contamos desde 1 no se mostrara el uno si no el 2.

final si se incluye en el conteo,por ejemplo contamos desde 1 hasta 10 si se mostrara 10 y no 9.

stride es el conteo que usaremos,por ejemplo contar de dos en dos a cien:

#/usr/bin/env python3

dos_en_dos = list(range(1,101))

print (dos_en_dos[1:100:2]) # 1 no se cuenta iniciamos en 1 para que cuente desde 2,100 es el final(si se cuenta) y de dos en dos



En lo que hice al principio fue que voltee un string con un stride:

Ya que con ::

[::-1]

Nos estamos saltando los indices inicio y final y toma el valor de la cadena entera,y con el stride contamos hacia atrás como dice arriba, negativo es igual a hacia atrás,o de derecha a izquierda.

Esto mas que nada es para copiar valores,por ejemplo tenemos tres sistemas en una lista:

#!/usr/bin/env python3

sistemas = ["Gentoo","iOS","Arch"]

# Y solo queremos mostrar los tipo Linux

GyA = sistemas[0:3:2]

print ("Mis sistemas Linux son: " + GyA[0] + " y " + GyA[1])




Eso no fue magia y tampoco se fueron juntos porque los dos son linux :P

Como he dicho en otras entradas de python y de perl y hasta de bash,las listas,diccionarios,hashes arrays,vectores,y otras cosas necesitan indices, los cuales comienzan desde 0 y en el caso de particionado no es la diferencia,solo que es un poco mas complicado,pero bueno.

Esto mismo se puede usar en cadenas de texto,solo que los espacios también se cuentan,en las cadenas cada espacio sera un indice,y bueno eso es todo :D

No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.