sábado, 21 de diciembre de 2013

Colecciones en Python


Saludos a todos los lectores de este blog, hoy vamos a tratar un tema muy importante en cualquier lenguaje de programación como es el trabajar con colecciones de datos, y en Python tenemos 4 formas diferentes: listas, tuplas, diccionarios y conjuntos.

Empecemos
  • Listas: Las listas, es lo más parecido que podemos encontrar a los arrays o vectores que trabajan otros lenguajes de programación. Las listas pueden contener todo tipo de datos (números, cadenas, listas, etc), y crear una lista e imprimir todos sus elementos es tan fácil como escribir dos lineas parecidas a estas:
  • lista = [1,2,'hola',False]
    print lista
    
    Y los métodos que nos permitirán realizar las funciones básicas de las listas son los siguientes:
    lista.append(3)
    """append agregara un elemento al final de la lista por lo que nuestra lista tendra los siguientes valores [1,2,'hola',False,3]"""
    lista.insert(2,'mundo')
    """insert agregara un elemento en el indice que se le indique, en este caso el indice es dos por lo que nuestra lista tendra los siguientes valores [1,2,'mundo','hola',False,3]"""
    lista.remove(1)
    """remove eliminara el primer elemento de la lista que sea igual al valor indicado, en este caso es 1 por lo que nuestra lista tendra los siguientes valores [2,'mundo',hola',False,3]"""
    lista.index('hola')
    """index nos devuelve el valor del indice del elemento que se le indica como parametro, en este caso es la cadena hola y el valor que nos devolvera es 2"""
    
    El acceso a los datos de una lista es a través de los índices que indican la posición de cada uno de los elementos de la lista. Debemos tener siempre en cuenta que el primer elemento de la lista tendrá como indice el 0, el segundo tendrá como indice el 1, el tercero el 2 y así sucesivamente.
    lista[3]
    """nos permitira acceder al elemento que tiene por indice 3 en la lista, en el ejemplo podremos ver que es False"""
    
    Python tiene una peculiaridad al trabajar con listas que lo diferencia de otros lenguajes, y es que python hace uso de indices con valor negativo. ¿Y para qué nos servirían los índices negativos? Bueno, los índices negativos nos permiten acceder de forma más fácil a los últimos elementos de la lista siendo el valor de índice -1 con el que accederemos al último elemento de la lista, el valor de índice -2 al penúltimo, el -3 al antepenúltimo y así sucesivamente.
    lista[-2]
    """nos permitira acceder al penultimo elemento en la lista, en el ejemplo podremos ver que es False"""
    
    Otra propiedad de las listas en python es el uso de slicing o particionado, lo que nos permite el seleccionar una fragmento de la lista indicándole el inicio y el fin, incluso podemos indicarle el inicio el fin y el salto para poder indicar cada cuantos elementos se agregará un elemento más a la nueva lista.
    lista[1:3]
    """nos permitira tener la siguiente particion de nuestra lista ['mundo', 'hola']"""
    lista[1:4:2]
    """nos permitira tener la siguiente particion de nuestra lista ['mundo', False]"""
    
  • Tuplas: A diferencia de las listas, las tuplas son inmutables y tienen un tamaño fijo, sin embargo, tienen las mismas propiedades que las listas para acceder a sus elementos. La forma de crear una tupla es de la siguiente manera:
  • tupla0 = (1,False,'Hola')
    """Tambien podemos hacerlo sin parentesis"""
    tupla1 = 1,False,'Hola'
    """Nota: Si queremos crear una tupla con un solo elemento debemos colocar la coma al final"""
    tupla2= 1,
    La forma de acceder a los elementos de las tuplas es la misma que en las listas, indicando el índice entre corchetes.
    tupla0[0]
    """nos permitira acceder al primer elemento de nuestra tupla, en el ejemplo podremos ver que es 1"""
    
  • Diccionarios: Los diccionarios son colecciones que relaciona una clave con un valor en este orden:
  • diccionario = {"clave":"valor"}
    
    Como clave podemos usar cualquier valor inmutable cadenas, boleanos, tuplas, etc. menos listas o diccionarios dado que son mutables. La forma de acceder a los valores almacenados en los diccionarios es a través de las claves y no de los índices como en las listas o la tuplas.
    diccionario = {"clave":"valor"}
    diccionario["clave"]
    """Nos devolvera 'valor'"""
    
    En los diccionarios no podemos hacer uso del particionado, debido a que no son de tipo secuencia si no de tipo mapping (asociaciones).

  • Conjuntos: Los conjuntos son colecciones de datos no ordenados y sin elementos repetidos, la forma de crear un diccionario es la siguiente:
  • conjunto = {1,2,'hola',False}
    """O si deseamos trabajar una cadena como un cojunto seria de la siguiente manera"""
    palabra = set('palabra')
    
    Y estos son algunos de sus usos:
    print conjunto0 - conjunto1
    """Elementos de conjunto0 que no estan en conjunto1 set([False, 'hola'])"""
    print conjunto0 | conjunto1
    """Elementos en conjunto0 o en conjunto1 set([False, 1, 2, 3, 'Mundo', 'hola'])"""
    print conjunto0 & conjunto1
    """Elementos en conjunto0 y en conjunto1 set([1, 2])"""
    print conjunto0 ^ conjunto1
    """Elementos en conjunto0 o en conjunto1 pero no en ambos set([False, 3, 'Mundo', 'hola'])"""
    print 1 in conjunto1
    """Devuelve si elemento 1 pertenece en conjunto1, en este caso es True"""
    
¡Manos a la obra!
  1. Abrimos nuestro o proyecto anterior o en su defecto lo descargamos de github.
  2. Dentro de nuestro paquete clases, creamos un nuevo archivo con el nombre clsBiblioteca.py y dentro de él, una clase nueva a la que llamaremos Biblioteca y en ella crearemos nuestra lista de libros.
  3. class Biblioteca():
     """docstring for Biblioteca"""
     def __init__(self):
      self.nombre = ""
      """Creamos una lista de libros vacia"""
      self.libros = []
    
  4. Agregaremos además dentro de nuestra clase Biblioteca los métodos básicos que nos ayudarán a trabajar con nuestra lista de libros tales como agregar, insertar, eliminar, cantidad de libros, entre otros.
  5. def agregarLibro(self,libro):
      """metodo que nos permite agregar un libro al final de nuestra lista recibiendo como parametro un objeto libro"""
      self.libros.append(libro)
    
     def insertaLibro(self,indice,libro):
      """metodo que nos permite agregar un libro en una posicion dada"""
      self.libros.insert(indice,libro)
    
     def cantidadLibros():
      """metodo que nos devuelve la cantidad de libros en la lista"""
      return len(self.libros)
    
     def eliminarLibro(self,libro):
      """metodo que eliminara el primer elemento de la lista con el valor libro"""
      self.libros.remove(libro)
    
     def listaLibros(self):
      """metodo que nos devuelve la lista entera de libros"""
      return self.libros
    
     def getLibro(self,indice):
      """metodo que nos devuelve un libro de la lista en el indice indicado"""
      return self.libros[indice]
    
  6. Modificamos nuestro método principal dentro de nuestro archivo main.py para agregar dentro de una lista los objetos creados.
  7. def main():
    
     """Instanciamos un nuevo objeto de tipo Biblioteca"""
     biblioteca = clases.clsBiblioteca.Biblioteca()
     """Instanciamos un nuevo objeto de tipo libro"""
     libro0 = clases.clsLibro.Libro()
     """Asignamos valores a los atributos de nuestro objeto"""
     libro0.setTitulo('Python para todos')
     libro0.setAutor('Raul Gonzalez Duque')
     libro0.setEstado(True)
    
     """Agregamos el primer libro a la lista de libros"""
     biblioteca.agregarLibro(libro0)
    
  8. Ahora haremos un recorrido por los libros de nuestra lista con un bucle for y nos mostrará la información de cada libro.
  9. """Hacemos el recorrido por nuestra lista y mostramos informacion general de los libros de la lista"""
    for libro in biblioteca.listaLibros():
      libro.InfoLibro()
    
  10. El resultado al ejecutar nuestro archivo main.py será el siguiente:
  11. $ python main.py 
    Datos del Libro
    Titulo: Python para todos
    Autor: Raul Gonzalez Duque
    Estado: Disponible
    Datos del Libro
    Titulo: Pro git
    Autor: Scott Chacon
    Estado: Disponible
    
Código Completo

main.py
import sys
sys.path.append('clases')
import clases.clsLibro
import clases.clsBiblioteca

def main():

 """Instanciamos un nuevo objeto de tipo Biblioteca"""
 biblioteca = clases.clsBiblioteca.Biblioteca()
 """Instanciamos un nuevo objeto de tipo libro"""
 libro0 = clases.clsLibro.Libro()
 """Asignamos valores a los atributos de nuestro objeto"""
 libro0.setTitulo('Python para todos')
 libro0.setAutor('Raul Gonzalez Duque')
 libro0.setEstado(True)

 """Agregamos el primer libro a la lista de libros"""
 biblioteca.agregarLibro(libro0)

 """Instanciamos un nuevo objeto de tipo libro"""
 libro1 = clases.clsLibro.Libro()
 """Asignamos valores a los atributos de nuestro objeto"""
 libro1.setTitulo('Pro git')
 libro1.setAutor('Scott Chacon')
 libro1.setEstado(True)

 """Agregamos el primer libro a la lista de libros"""
 biblioteca.agregarLibro(libro1)

 """Hacemos el recorrido por nuestra lista y mostramos informacion general de los libros de la lista"""
 for libro in biblioteca.listaLibros():
  libro.InfoLibro()
 

if __name__=='__main__':
 main()
clsLibro.py
class Libro():

 """Constructor"""
 def __init__(self):
  """Inicializamos Variables"""
  self.titulo = ""
  self.autor = ""
  self.estado = True

 def setTitulo(self,titulo):
  self.titulo = titulo

 def getTitulo(self):
  return self.titulo

 def setAutor(self, autor):
  self.autor = autor

 def getAutor(self):
  return self.autor

 def setEstado(self, estado):
  self.estado = estado

 def getEstado(self):
  return self.estado

 def InfoLibro(self):
  print('Datos del Libro')
  print('Titulo: {}'.format(self.getTitulo()))
  print('Autor: {}'.format(self.getAutor()))
  if self.getEstado()==True:
   print('Estado: {}'.format('Disponible'))
  else:
   print('Estado: {}'.format('Prestado'))
clsBiblioteca.py
class Biblioteca():
 """docstring for Biblioteca"""
 def __init__(self):
  self.nombre = ""
  """Creamos una lista de libros vacia"""
  self.libros = []

 def agregarLibro(self,libro):
  """metodo que nos permite agregar un libro al final de nuestra lista recibiendo como parametro un objeto libro"""
  self.libros.append(libro)

 def insertaLibro(self,indice,libro):
  """metodo que nos permite agregar un libro en una posicion dada"""
  self.libros.insert(indice,libro)

 def cantidadLibros():
  """metodo que nos devuelve la cantidad de libros en la lista"""
  return len(self.libros)

 def eliminarLibro(self,libro):
  """metodo que eliminara el primer elemento de la lista con el valor libro"""
  self.libros.remove(libro)

 def listaLibros(self):
  """metodo que nos devuelve la lista entera de libros"""
  return self.libros

 def getLibro(self,indice):
  """metodo que nos devuelve un libro de la lista en el indice indicado"""
  return self.libros[indice]

 def setNombre(self,nombre):
  self.nombre = nombre

 def getNombre(self):
  return self.nombre

Descarga el código completo desde github.

Bueno lectores espero este pequeño tutorial haya sido útil y de su agrado, no olviden dejar comentarios expresando sus dudas u opiniones todo nos ayuda a mejorar para ustedes, recuerden que "La práctica hace al maestro" así que no dejen de prácticar.

No hay comentarios:

Publicar un comentario