Los principales tipos
Cadenas de caracteres
1. Sintaxis
Las cadenas de caracteres son absolutamente indispensables en cualquier programa informático: permiten al programa comunicarse con los usuarios dándoles información. Sin embargo, se trata de un objeto bastante complejo, pues una cadena debe poder ser maleable y permitir, por ejemplo, contener ciertas partes variables.
Para escribir una cadena de caracteres literal, pueden usarse indistintamente las comillas rectas simples o dobles:
cadena = 'cadena'
cadena = "cadena"
Los dos objetos creados son idénticos.
Conviene saber que Python permite escribir cadenas en varias líneas, de la siguiente manera:
"""
Esto es una cadena en varias líneas.
Esto es una nueva línea.
"""
Resulta interesante saber que si la cadena no está asignada a una variable y declarada en la parte superior del módulo, será la documentación del módulo también llamada docstring. Ocurre igual con una función o una clase.
Def funcion():
"""
Esta es la documentación de la función
"""
help(funcion)
2. Formato de una cadena
Hemos visto que el método que permite mostrar algo por la salida estándar puede recibir de 1 a n parámetros:
print(cadena, numero, otra_cadena)
Sin embargo, si queremos escribir una cadena compleja, existe un medio muy sencillo de construir cadenas dinámicas, es decir, una cadena cuyo contenido puede variar en función de variables.
print(f"Cadena: {str}")
Cadena: <class 'str'>
En este ejemplo, lo importante es el carácter f que precede a la cadena de caracteres. Como era de esperar, a esto se le llama una f-string y simplemente se puede considerar que se trata de una cadena con huecos, y los huecos son las llaves que contienen un nombre de variable.
En nuestro ejemplo, la variable str apunta a la clase de las cadenas de caracteres que está incluida en el módulo builtins. Dentro de estos corchetes, se pueden usar funciones, atributos del objeto o incluso usar el operador corchete:
>>> d = {"key": "value"}
>>> print(f"diccionario {d}, key {d['key']} or {d.get('key')}...
Listas
1. Sintaxis
La lista es el objetivo contenedor por excelencia. A diferencia de la cadena de caracteres, es modificable y está hecha para ser modificada.
Puede contener todo tipo de objetos, incluso objetos de distintos tipos.
Empezaremos creando una lista de caracteres:
lista = list("Python is awesome")
Lo que equivale a declarar la lista así:
lista = ['P', 'y', 't', 'h', 'o', 'n', ' ', 'i', 's', ' ', 'a',
'w', 'e', 's', 'o', 'm', 'e']
Los delimitadores de la lista son los corchetes y cada elemento está separado de su vecino por una coma.
2. Índices
Cada elemento de esta lista dispone de un índice (como la cadena de caracteres) y estos índices son extremadamente importantes: pueden utilizarse de muchas maneras.
He aquí cómo recuperar un elemento:
lista[4] # Devuelve o
También cómo utilizar un índice negativo para partir del final:
lista[-3] # Devuelve o
Es posible realizar lo que se llama una extracción de sub-lista, que consiste en crear una copia parcial de una lista; por ejemplo, del comienzo, con los seis primeros elementos:
lista[:6] # Devuelve ['P', 'y', 't', 'h', 'o', 'n']
Los dos puntos sirven para separar el índice de comienzo del del final.
También es posible extraer los caracteres séptimo y octavo:
lista[7:9] # Devuelve ['i', 's']
Se trata de algo importante: en Python, los índices que permiten delimitar una zona siempre van del primero incluido al último excluido.
Para ir hasta el final, podemos dejar el segundo argumento vacío:
lista[10:] # Devuelve ['a', 'w', 'e', 's', 'o', 'm', 'e']
Por último, es posible utilizar un paso, posicionando un tercer argumento:
lista[2::5] # Devuelve ['t', 'i', 'e']
Y todo esto puede hacerse indiferentemente utilizando índices y un paso que pueden ser positivos o negativos.
lista[-3::-6] # Devuelve ['o', 's', 't']
Preste atención, sin embargo: se parte del primer elemento y se desplaza según el sentido del paso (hacia la derecha...
Diccionarios
1. Presentación de los diccionarios
Un diccionario es un contenedor que asocia una clave con un valor. Es un tipo de dato esencial cuando se desea acceder rápidamente a un valor. Para ilustrarlo, imaginemos una agenda de direcciones tradicional: por cada nombre, se asocia un número de teléfono.
agenda = {
"Climent": "601020304",
"Claudia": "934123456",
"Mateo": "917101345",
}
Existen tres entradas en este diccionario. Lo más importante es recordar que lo único que cuenta es la asociación entre la clave y el valor.
De este modo, si se desea obtener el número de teléfono de Claudia, podríamos hacerlo así:
agenda["Claudia"]
El acceso al elemento es extremadamente rápido, mucho más rápido que ir a buscar un elemento en una lista ordenada, ordenada según un orden de nombres, por ejemplo.
Podemos agregar un nuevo número de la siguiente manera:
agenda["Sebastián"] = "791827364"
Si la clave existe, entonces su valor se actualiza; en caso contrario, se crea un nuevo registro.
También en este caso, esta operación es muy rápida. Esto es así porque no existe ningún orden en el diccionario y no es necesario mantener un orden en cada momento.