Variables
Variables
Una variable es un espacio dónde almacenamos los valores de los datos con los que trabajamos.
Podemos verlo como una caja en la que podemos guardar cosas. Esas cosas en python son Objetos (veremos este concepto en profundidad en Clases
).
# No hay necesidad de declarar las variables antes de asignarlas.
una_variable = 5 # La convención es usar guiones_bajos_con_minúsculas
una_variable #=> 5
# Acceder a variables no asignadas previamente es una excepción.
# Ve Control de Flujo para aprender más sobre el manejo de excepciones.
otra_variable # Levanta un error de nombre
Colecciones
Podemos agrupar los tipos primitivos vistos con anterioridad en colecciones. Las colecciones son estructuras que permiten almacenar varios Objetos de python
Listas (Mutable)
Almacena una secuencia de elementos y mantiene su orden. Las listas pueden crecer y decrecer
# Listas almacena secuencias
lista = [] # una lista vacía
# Puedes empezar una lista con los valores que desees
otra_lista = [4, 5, 6]
# Añadir elementos al final de una lista con 'append'
lista.append(1) #lista ahora es [1]
lista.append(2) #lista ahora es [1, 2]
lista.append(4) #lista ahora es [1, 2, 4]
lista.append(3) #lista ahora es [1, 2, 4, 3]
# Retirar del final de la lista con 'pop'
lista.pop() #=> 3 y lista ahora es [1, 2, 4]
# Pongámoslo de vuelta
lista.append(3) # Nuevamente lista ahora es [1, 2, 4, 3].
# Acceder a un elemento según su posición en la lista
lista[0] #=> 1
# Acceder al último elemento
lista[-1] #=> 3
# Acceder fuera del rango de la lista lanza un error 'IndexError'
lista[4] # Levanta la excepción IndexError
# Puedes mirar por rango con la sintáxis de trozo (slice)
# (Se le conoce como rango [cerrado/abierto) para los matemáticos.)
lista[1:3] #=> [2, 4]
# Omite el inicio
lista[2:] #=> [4, 3]
# Omite el final
lista[:3] #=> [1, 2, 4]
# Selecciona cada dos elementos
lista[::2] # =>[1, 4]
# Invierte la lista
lista[::-1] # => [3, 4, 2, 1]
# Usa cualquier combinación de estos para crear trozos avanzados
# lista[inicio:final:pasos]
# Remueve elementos arbitrarios de una lista con 'del'
del lista[2] # lista ahora es [1, 2, 3]
# Puedes sumar listas
lista + otra_lista #=> [1, 2, 3, 4, 5, 6] - Nota: lista y otra_lista no se tocan
# Concatenar listas con 'extend'
lista.extend(otra_lista) # lista ahora es [1, 2, 3, 4, 5, 6]
# Verifica la existencia de un elemento en una lista con 'in'
1 in lista #=> True
# Examina el largo de una lista con 'len'
len(lista) #=> 6
Tuplas (Inmutable)
Las tuplas equivalentes a las listas pero inmutables. No es posible modificar sus valores ni tamaño una vez declaradas.
tupla = (1, 2, 3)
tupla[0] #=> 1
tupla[0] = 3 # Levanta un error TypeError
# También puedes hacer todas esas cosas que haces con listas
len(tupla) #=> 3
tupla + (4, 5, 6) #=> (1, 2, 3, 4, 5, 6)
tupla[:2] #=> (1, 2)
2 in tupla #=> True
# Puedes desempacar tuplas (o listas) en variables
a, b, c = (1, 2, 3) # a ahora es 1, b ahora es 2 y c ahora es 3
# Tuplas son creadas por defecto si omites los paréntesis
d, e, f = 4, 5, 6
# Ahora mira que fácil es intercambiar dos valores
e, d = d, e # d ahora es 5 y e ahora es 4
Conjuntos (Mutables)
Los conjuntos es una colección de valores, al igual que las listas, pero sin orden y donde no es posible que existan valores repetidos.
# Sets (conjuntos)
conjunto_vacio = set()
# Inicializar un conjunto con montón de valores.
un_conjunto = {1,2,2,3,4} # un_conjunto ahora es {1, 2, 3, 4}
# Añade más valores a un conjunto
conjunto_lleno.add(5) # conjunto_lleno ahora es {1, 2, 3, 4, 5}
conjunto_lleno.add(5) # conjunto_lleno sigue siendo {1, 2, 3, 4, 5} aunque agregue otro 5
# Haz intersección de conjuntos con &
otro_conjunto = {3, 4, 5, 6}
conjunto_lleno & otro_conjunto #=> {3, 4, 5}
# Haz unión de conjuntos con |
conjunto_lleno | otro_conjunto #=> {1, 2, 3, 4, 5, 6}
# Haz diferencia de conjuntos con -
{1,2,3,4} - {2,3,5} #=> {1, 4}
# Verifica la existencia en un conjunto con 'in'
2 in conjunto_lleno #=> True
10 in conjunto_lleno #=> False
Diccionarios (Mutables)
Los diccionarios relacionan llaves y valores. Ahora no accedemos al elemento por su posición como hacíamos en una lista, sino por su clave.
dicc_vacio = {}
dicc_vacio = dict() # Es posible declararlo de esta forma
# Aquí está un diccionario prellenado
dicc_lleno = {"uno": 1, "dos": 2, "tres": 3}
dicc_lleno = dict(uno=1, dos=2, tres=3) # o también de esta forma
# Busca valores con []
dicc_lleno["uno"] #=> 1 # la clave (key) es la cadena de texto "uno" y su valor es el int 1
# Obtener todas las llaves como una lista con 'keys()'. Necesitamos envolver la llamada en 'list()' porque obtenemos un iterable. Hablaremos de eso luego.
list(dicc_lleno.keys()) #=> ["tres", "dos", "uno"]
# Nota - El orden de las llaves del diccionario no está garantizada.
# Tus resultados podrían no ser los mismos del ejemplo.
# Obtén todos los valores como una lista. Nuevamente necesitamos envolverlas en una lista para sacarlas del iterable.
list(dicc_lleno.values()) #=> [3, 2, 1]
# Nota - Al igual que con las llaves, no se garantiza el orden.
# Verifica la existencia de una llave en el diccionario con 'in'
"uno" in dicc_lleno #=> True
1 in dicc_lleno #=> False
# Buscar una llave inexistente deriva en KeyError
dicc_lleno["cuatro"] # KeyError
# Usa el método 'get' para evitar la excepción KeyError
dicc_lleno.get("uno") #=> 1
dicc_lleno.get("cuatro") #=> None
# El método 'get' soporta un argumento por defecto cuando el valor no existe.
dicc_lleno.get("uno", 4) #=> 1
dicc_lleno.get("cuatro", 4) #=> 4
# El método 'setdefault' inserta en un diccionario solo si la llave no está presente
dicc_lleno.setdefault("cinco", 5) #dicc_lleno["cinco"] es puesto con valor 5
dicc_lleno.setdefault("cinco", 6) #dicc_lleno["cinco"] todavía es 5
# Elimina llaves de un diccionario con 'del'
del dicc_lleno['uno'] # Remueve la llave 'uno' de dicc_lleno