Colecciones
Una colección permite agrupar varios objetos bajo un mismo nombre. Por
ejemplo, si necesitamos almacenar en nuestro programa los nombres de
los alumnos de un curso de programación, será más conveniente
ubicarlos a todos dentro de una misma colección de nombre alumnos
,
en lugar de crear los objetos alumno1
, alumno2
, etc.
En Python existen tres colecciones básicas, a saber: las listas, las tuplas y los diccionarios.
Listas
Una lista es un conjunto ordenado de objetos. Por objetos entendemos cualquiera de los tipos de dato ya mencionados, incluso otras listas.
Para crear una lista, especificamos sus elementos entre corchetes y separados por comas.
>>> lenguajes = ["Python", "Java", "C", "C++"]
Dado que se trata de una colección ordenada, accedemos a cada uno de los elementos a partir de su posición, comenzando desde el 0.
>>> lenguajes[0]
'Python'
>>> lenguajes[1]
'Java'
(En Python, las cadenas de caracteres pueden estar formadas tanto por comillas dobles como por comillas simples).
La posición de un elemento, también conocida como índice, aumenta de izquierda a derecha cuando éste es positivo. Indicando un número negativo, los elementos se obtienen de derecha a izquierda.
>>> lenguajes[-1]
'C++'
>>> lenguajes[-2]
'C'
Para cambiar un elemento, combinamos la nomenclatura descrita con la asignación.
>>> lenguajes[1] = "Rust"
>>> lenguajes
['Python', 'Rust', 'C', 'C++']
Para remover un elemento, utilizamos la palabra reservada del
.
>>> del lenguajes[1]
>>> lenguajes
['Python', 'C', 'C++']
Nótese que cuando un elemento es eliminado, a excepción del último, todos los que lo suceden se corren una posición hacia la izquierda.
La operación inversa es la de insertar un elemento en una posición
determinada, desplazando el resto que le sucede una posición hacia la
derecha, vía el método (volveremos sobre este concepto más
adelante) insert()
.
# Insertar la cadena "Elixir" en la posición 1.
>>> lenguajes.insert(1, "Elixir")
>>> lenguajes
['Python', 'Elixir', 'C', 'C++']
Por último, la operación más común es la de agregar un elemento al
final de la lista. Para ello empleamos append()
.
>>> lenguajes.append("Haskell")
>>> lenguajes
['Python', 'Elixir', 'C', 'C++', 'Haskell']
¡Genial! Baste por el momento con lo que se ha dicho sobre las listas. Conoceremos más propiedades en la sección de Slicing.
Tuplas
Las tuplas, al igual que las listas, son colecciones ordenadas. No obstante, a diferencia de éstas, son inmutables. Es decir, una vez asignados los elementos, no pueden ser alterados. En términos funcionales, podría decirse que las tuplas son un subconjunto de las listas, por cuanto soportan las operaciones con índices para acceder a sus elementos, pero no así las de asignación.
# Indicamos los elementos entre paréntesis.
>>> lenguajes = ("Python", "Java", "C", "C++")
>>> lenguajes[0]
'Python'
>>> lenguajes[-1]
'C++'
Un intento por remover un elemento de una tupla o asignarle un nuevo valor arrojará un error.
Ahora bien, si las listas hacen todo lo que hace una tupla, ¿para qué, entonces, existen las tuplas? Sencillamente porque una tupla, justamente por carecer de todas las funcionalidades de mutación de elementos, es un objeto más liviano y que se crea más rápido.
La función del programador será la de dirimir si para una determinada colección ordenada de objetos le conviene más una lista o una tupla, según sus elementos deban ser alterados en el futuro o no.
Diccionarios
Los diccionarios, a diferencia de las listas y las tuplas, son colecciones no ordenadas de objetos. Además, sus elementos tienen una particularidad: siempre conforman un par clave-valor. Es decir, cuando añadimos un valor a un diccionario, se le asigna una clave única con la que luego se podrá acceder a él (pues la posición ya no es un determinante).
Para crear un diccionario, indicamos los pares clave-valor separados por comas y estos, a su vez, separados por dos puntos.
>>> d = {"Python": 1991, "C": 1972, "Java": 1996}
En este ejemplo, creamos un diccionario con tres elementos, cuyas
claves son "Python"
, "C"
y "Java"
y sus valores los años en los que
fueron creados, a saber: 1991
, 1972
y 1996
, respectivamente.
Para acceder a cualquiera de los valores, debemos indicar su clave entre corchetes.
>>> d["Java"]
1996
Las operaciones de añadir, modificar o eliminar valores son similares a las de las listas.
# Añadir un par clave/valor.
>>> d["Elixir"] = 2011
# Modificar uno existente.
>>> d["Python"] = 3000
# Eliminar.
>>> del d["C"]
>>> d
{'Python': 3000, 'Java': 1996, 'Elixir': 2011}
Las claves típicamente serán números o cadenas, aunque bien podrían ser de cualquier otro tipo de dato inmutable (todos los vistos hasta ahora son inmutables, a excepción de las listas y los diccionarios). Además, nunca puede haber claves repetidas, ya que actúan como identificadores únicos para un valor determinado. Los valores, en cambio, pueden ser de cualquier tipo de dato, ¡incluyendo otros diccionarios!
Operaciones comunes
Hemos visto cómo del
se aplica tanto a listas como a diccionarios.
Existen varias funciones que operan sobre distintos tipos de
colecciones. Por ejemplo, la función incorporada len()
retorna el
número de elementos en una colección.
>>> len([1, 2, 3, 4])
4
>>> len({"Python": 1991, "C": 1972})
2
>>> len(("¡Hola, mundo!",))
1
En la tercera llamada pasamos como argumento una tupla que contiene un solo elemento (una cadena). No obstante, dado que para definir tuplas se emplean paréntesis, es necesario añadir una coma al final para que Python entienda que se trata de una tupla en lugar de una expresión (los paréntesis también son utilizados para agrupar expresiones, como en matemática).
Una cadena es, en rigor, una colección de caracteres. Por ello también soporta las operaciones de acceso a sus elementos (¡no así las de asignación, ya que son inmutables!).
>>> s = "¡Hola, mundo!"
>>> s[4]
'a'
>>> len(s)
13
Por último, para saber si un elemento está dentro de una colección,
empleamos la palabra reservada in
.
>>> 10 in (1, 2, 3, 4)
False
>>> "mundo" in "¡Hola, mundo!"
True
>>> "Python" in {"Python": 1991, "C": 1972}
True
Nótese que el operador in
en los diccionarios actúa sobre las
claves, no sobre los valores.
¡Más sobre colecciones!
Las cadenas incluyen muchos métodos para realizar operaciones sobre ellas. Sería poco práctico comentarlas todas en este tutorial, pero, si te interesa, puedes profundizar en el siguiente artículo: 30 métodos de las cadenas. Y para más funcionalidades del resto de las colecciones, véanse Listas y tuplas y Diccionarios.
Pero con lo que hemos aprendido hasta el momento sobre este tema es suficiente para seguir adelante. Hablemos, entonces, de los bucles.