Python es uno de los lenguajes con mas auge hoy en día gracias a la facilidad y velocidad con la que se desarrolla, y a su filosofía de orden y simplicidad. El objetivo de este post es dar un recorrido practico sobre todas las estructuras de datos que nos ofrece este maravilloso lenguaje de programación de forma nativa. Cubriremos lo siguiente:

  • Listas
  • Tuplas
  • Sets
  • Strings
  • Diccionarios

Listas

Las listas o arrays en python son estructuras de datos muy flexibles en las que podemos mezclar valores de varios tipos, o bien que sean de un solo tipo. Su declaración es sencilla y obedece un formato JSON estándar.

>>> [1, 2, 3, 4]
[1, 2, 3, 4]
>>> ["hola", "mundo"]
["hola", "mundo"]
>>> [0, 1.5, "hola"]
[0, 1.5, "hola"]
>>> [0, 1.5, "hola"]
[0, 1.5, "hola"]

Como se ven en estos ejemplos, podemos mezclar números enteros con cadenas e incluso números con puntos decimales.

Ademas una lista en python puede contener en una o mas de sus posiciones otra lista de dimensiones. formando así una lista ortogonal.

>>> a = [1, 2]
>>> b = [1.5, 2, a]
>>> b
[1.5, 2, [1, 2]]

Append y Extend

Las dos operaciones básicas en las listas son las de append y extend. La diferencia entre estas dos operaciones es que append agrega un elemento al final de la lista, mientras que extend es capaz de agregar otra lista al final de la lista. Veamos unos ejemplos:

– Append:

>>> lista = ['a','b']
>>> lista.append('c')
>>> stack
['a', 'b', 'c']

– Extend

>>> lista = ['a', 'b', 'c']
>>> lista.extend(['d', 'e','f'])
>>> lista
['a', 'b', 'c', 'd', 'e', 'f']

Operaciones con listas

Ahora veamos todas las operaciones posibles con listas en python:

index

Nos devuelve la posición en la lista del elemento indicado

>>> lista = ['a','b','c','b', 'a']
>>> lista.index('b')
1

insert

Inserta un elemento en la lista según el indicie deseado.

#['b', 'c', 'b']
>>> lista.insert(2, 'a')
>>> lista
['b', 'c', 'a', 'b']

remove

De manera similar se puede remover un elemento de la lista.

#['b', 'c', 'a', 'b']
>>> lista.remove(2, 'a')
>>> lista
['b', 'c', 'b']

pop

Pop devuelve el ultimo elemento de la lista y posteriormente lo remueve de la misma.

#['b', 'c', 'b']
>>> lista.pop()
'b'
>>> lista
['b', 'c']

count

Devuelve la cuenta de elementos actualmente en la lista

#['b', 'c', 'b']
>>> lista.count('b')
2

Sort

Existen varias posibilidades de ordenar un arreglo según se indique en el método sort. Para ordenar en orden ascendente por default:

>>> mi_lista.sort()
>>> mi_lista
['a', 'b', 'b', 'c']

o bien en orden descendente.

>>> mi_lista.sort(reverse=True)
>>> mi_lista
['c', 'b', 'b', 'a']

O se puede simplemente invertir el orden de los elementos sin ordenarlos previamente

>>> my_list = ['a', 'c' ,'b']
>>> my_list.reverse()
>>> my_list
['b', 'c', 'a']

Como verán la simplicidad siempre fue tomada en cuenta cuando diseñaron este lenguaje tan maravilloso.

Tuplas

Las tuplas son como las listas, excepto que en este caso son inmutables. Una tupla consiste de varios valores separados por comas.

>>> a = (1, 2, 3)
>>> a[0]
1

Algunas funciones de las listas también funcionan en las tuplas, como len y la sintaxis para obtener porciones del arreglo o slicing

>>> len(a)
3
>>> a[1:]
2, 3

Una cosa importante que hay que notar con las tuplas, es que como los paréntesis también se usan en python para agrupar expresiones, si quisiéramos crear una tupla con un solo valor simplemente agregamos una coma al final de esta manera:

>>> a = (1)
>> a
1
>>> b = (1,)
>>> b
(1,)
>>> b[0]
1

Sets

Los sets en python son listas sin un orden específico pero cuyos elementos son únicos, es decir, no existe la repetición. Y para definir uno hay que explícitamente indicar que queremos que la lista sea un set con la función con el mismo nombre,

>>> x = set([3, 1, 2, 1])
set([1, 2, 3])

A partir de python 2.7, podemos usar llaves para definir sets

>>> x = {3, 1, 2, 1}
set([1, 2, 3])

Podemos agregar nuevos elementos con la función add

>>> x = set([1, 2, 3])
>>> x.add(4)
>>> x
set([1, 2, 3, 4])

Igual que en las listas, podemos revisar si hay un elemento en el set usando la función in 

>>> x = set([1, 2, 3])
>>> 1 in x
True
>>> 5 in x
False

Strings

Una de las cosas curiosas sobre python, es que en muchas maneras podemos manipular strings de la misma manera como se manipulan las listas. Esto convierte a los strings en una especie de estructura de datos conveniente de usar.

Podemos usar len en un string

>>> len("abrakadabra")
11

Y encontrar partes o segmentos del string según nos parezca conveniente.

>>> a = "helloworld"
>>> a[1] #primer caracter
'e'
>>> a[-2] # penultimo caracter
'l'
>>> a[1:5] #caracteres del uno al cinco
"ello"
>>> a[:5] #caracteres del primero al quinto
"hello"
>>> a[5:] #caracteres del quinto al ultimo
"world"
>>> a[-2:] # los ultimos dos caracteres de la cadena
'ld'
>>> a[:-2] # toda la cadena menos dos caracteres
'hellowor'
>>> a[::-1] # revertir el orden de la cadena
'dlrowolleh'

asi mismo podemos usar el operador in para buscar en la cadena

>>> 'hell' in 'hello'
True
>>> 'full' in 'hello'
False
>>> 'el' in 'hello'
True

Hay varios métodos muy útiles cuando se trata de manipular cadenas como split() el cual guarda la cadena en un arreglo según el carácter que indiquemos, o según los espacios en blanco si no especificamos ninguno.

>>> "hello world".split()
['hello', 'world']
>>> "a,b,c".split(',')
['a', 'b', 'c']

Si quisieramos volver a unir los elementos del arreglo en un string podemos hacer uso del metodo join 

>>> " ".join(['hello', 'world'])
'hello world'

El metodo strip, remueve el caracter o la secuencia de caracteres de la cadena segun se lo indiquemos.

>>> ' hello world\n'.strip()
'hello world'
>>> 'abcdefgh'.strip('abdh')
'cdefg'

adenas python soporta formatos en sus strings que nos recuerdan a aquel viejo y confiable preparedStatement

>>> a = 'hola'
>>> b = 'python'
>>> "%s %s" % (a, b)
'hola python'
>>> 'Capitulo %d: %s' % (1, 'Estructuras de datos')
'Capitulo 1: Estructuras de datos'

Diccionarios

Un diccionario en python actua de manera similar a una lista, excepto que el indice de este no necesariamente tiene que ser un numero entero, y se asemejan bastante a un objeto JSON

>>> a = {'x': 1, 'y': 2, 'z': 3}
>>> a['x']
1
>>> a['z']
3
>>> b = {}
>>> b['x'] = 2
>>> b[2] = 'foo'
>>> b[(1, 2)] = 3
>>> b
{(1, 2): 3, 'x': 2, 2: 'foo'}

para borrar un elemento de un diccionario, utilizamos el comando del

>>> a = {'x': 1, 'y': 2, 'z': 3}
>>> del a['x']
>>> a
{'y': 2, 'z': 3}

El mentodo keys devuelve todas las llaves en el diccionario. El metodo value devuelve todos los valores dentro del diccionario, y el metodo items devuelve todos los pares llave-valor dentro del diccionario en cuestion

>>> a.keys()
['x', 'y', 'z']
>>> a.values()
[1, 2, 3]
>>> a.items()
[('x', 1), ('y', 2), ('z', 3)]

Podemos iterar facilmente en un diccionario utilizando la notacion for…in

>>> for key in a: print key
...
x
y
z
>>> for key, value in a.items(): print key, value
...
x 1
y 2
z 3

Podemos igual que en todas las estructuras anteriores, buscar dentro de un diccionario con la palabra in

>>> 'x' in a
True
>>> 'p' in a
False
>>> a.has_key('x')
True
>>> a.has_key('p')
False

Asi mismo podemos obtener un item de la lista especificamente con el metodo get, y definir que regresar en caso el item no exista dentro del diccionario

>>> d = {'x': 1, 'y': 2, 'z': 3}
>>> d.get('x', 5)
1
>>> d.get('p', 5)
5
>>> d.setdefault('x', 0)
1
>>> d
{'x': 1, 'y': 2, 'z': 3}
>>> d.setdefault('p', 0)
0
>>> d
{'y': 2, 'x': 1, 'z': 3, 'p': 0}

Conclusiones

Asi pues, terminamos este repaso de las estructuras de datos que podemos usar en nuestros programas hechos con python. Podemos ver que son muy simples de entender y cumplen con la premisa de escribir menos codigo y hacer mas cosas!

Como siempre queda a su disposicion la caja de comentarios para hacer preguntas, que gustosamente contestare de la mejor manera posible 🙂

Saludos!

Categorized in: