En Python, existen varios tipos de datos incorporados y estructuras de datos que puedes utilizar.
Aquí te explico algunos de los más comunes y útiles:
1. Tipos de Datos Básicos:
- Números enteros (
int
): Representan números enteros positivos o negativos.
x = 5 y = -10
- Números de punto flotante (
float
): Representan números con decimales.
pi = 3.14159
- Cadenas de texto (
str
): Representan texto o secuencias de caracteres.
nombre = "Juan"
- Booleanos (
bool
): Solo pueden tener dos valores:True
oFalse
.
es_mayor = True
- Nulos (
NoneType
): El tipo de dato para representar la ausencia de valor.
x = None
2. Estructuras de Datos:
- Lista (
list
): Una colección ordenada que puede contener cualquier tipo de dato y permite duplicados. Es mutable (se puede modificar).
mi_lista = [1, 2, 3, "texto"] mi_lista.append(4) # Añade un elemento print(mi_lista[0]) # Salida: 1
- Diccionario (
dict
): Una colección no ordenada de pares clave-valor. Es mutable y las claves deben ser únicas.
mi_diccionario = {"nombre": "Juan", "edad": 25} print(mi_diccionario["nombre"]) # Salida: Juan
- Tupla (
tuple
): Una secuencia ordenada e inmutable de elementos. A diferencia de las listas, las tuplas no pueden modificarse después de ser creadas.
mi_tupla = (10, 20, 30)
- Conjunto (
set
): Una colección no ordenada de elementos únicos. Se usa para eliminar duplicados y realizar operaciones de conjuntos como intersección, unión, etc.
mi_set = {1, 2, 3, 4, 4} # El valor 4 aparecerá una sola vez
- Frozenset: Es similar a un
set
, pero inmutable. Una vez creado, no se puede modificar.
mi_frozenset = frozenset([1, 2, 3])
3. Tipos Avanzados:
- Bytes (
bytes
): Representa una secuencia inmutable de bytes (datos binarios).
datos = b"Hola Mundo"
- Bytearray (
bytearray
): Similar abytes
, pero mutable. Puedes modificar los valores después de crearlo.
datos_modificables = bytearray(b"Hola")
- Range (
range
): Representa una secuencia de números, generalmente usado en bucles (for
).
rango = range(1, 10) # Genera números del 1 al 9
- Enumeradores (
enum
): Se usa para definir conjuntos de valores constantes con nombres simbólicos.
from enum import Enum class Color(Enum): ROJO = 1 VERDE = 2 AZUL = 3
4. Colecciones Especializadas:
Python también proporciona estructuras de datos avanzadas a través del módulo collections
:
- Deque (
collections.deque
): Una lista doblemente enlazada que permite añadir y eliminar elementos de ambos extremos de manera eficiente.
from collections import deque mi_deque = deque([1, 2, 3]) mi_deque.appendleft(0) # Añadir al inicio
- Namedtuple (
collections.namedtuple
): Una tupla que permite acceso a los elementos mediante nombres, como si fuera un objeto.
from collections import namedtuple Persona = namedtuple('Persona', ['nombre', 'edad']) juan = Persona(nombre="Juan", edad=25) print(juan.nombre) # Salida: Juan
- Counter (
collections.Counter
): Un diccionario especializado para contar elementos, útil para conteos de frecuencias.
from collections import Counter conteo = Counter("abracadabra") print(conteo) # Salida: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
- Defaultdict (
collections.defaultdict
): Similar a un diccionario, pero con un valor por defecto si la clave no existe.
from collections import defaultdict mi_diccionario = defaultdict(int) print(mi_diccionario["clave_inexistente"]) # Salida: 0 (por defecto es un int que empieza en 0)
5. Estructuras de Datos Personalizadas (Clases):
En Python, puedes definir tus propias clases para crear estructuras de datos personalizadas, que te permiten agrupar datos y funciones relacionados.
Ejemplo básico:
class Persona: def __init__(self, nombre, edad): self.nombre = nombre self.edad = edad def saludar(self): return f"Hola, mi nombre es {self.nombre} y tengo {self.edad} años." juan = Persona("Juan", 25) print(juan.saludar()) # Salida: Hola, mi nombre es Juan y tengo 25 años.
Esto te permite organizar datos y comportamientos de manera más estructurada.
6. Comprehensions (Comprensiones):
Las comprensiones son una forma compacta de crear listas, conjuntos o diccionarios aplicando condiciones o transformaciones en una sola línea de código. Son muy útiles para manipular colecciones de datos de manera eficiente y legible.
- List comprehension:
cuadrados = [x**2 for x in range(5)] print(cuadrados) # Salida: [0, 1, 4, 9, 16]
- Set comprehension:
mi_set = {x for x in range(5)} print(mi_set) # Salida: {0, 1, 2, 3, 4}
- Dictionary comprehension:
diccionario = {x: x**2 for x in range(5)} print(diccionario) # Salida: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
7. Funciones Lambda:
Las funciones lambda son funciones anónimas o sin nombre que se definen en una sola línea. Son útiles para operaciones rápidas o como argumentos en otras funciones (como map()
, filter()
o sorted()
).
Ejemplo de una función lambda:
doblar = lambda x: x * 2 print(doblar(5)) # Salida: 10
8. Manejo de Excepciones:
En Python, puedes gestionar errores y excepciones usando try
, except
, finally
. Esto es útil para evitar que tu programa se bloquee si ocurre un error inesperado.
Ejemplo:
try: resultado = 10 / 0 except ZeroDivisionError: print("Error: No puedes dividir entre cero.") finally: print("Esto siempre se ejecuta.")
9. Iteradores e Iterables:
Un iterador es un objeto que permite recorrer una secuencia (como una lista o tupla) uno a uno. Los iteradores se crean de manera implícita en bucles for
y al usar funciones como next()
. También puedes crear iteradores personalizados.
Ejemplo básico con iter()
y next()
:
mi_lista = [1, 2, 3] iterador = iter(mi_lista) print(next(iterador)) # Salida: 1 print(next(iterador)) # Salida: 2
10. Generadores:
Los generadores son una forma eficiente de trabajar con iteradores. Se crean con funciones que usan la palabra clave yield
en lugar de return
, permitiendo que la función retenga su estado entre llamadas.
Ejemplo:
def contador(max): n = 0 while n < max: yield n n += 1 for num in contador(5): print(num) # Salida: 0, 1, 2, 3, 4
11. Manejo de Archivos:
Python tiene funciones integradas para trabajar con archivos de forma fácil. Puedes abrir, leer, escribir y cerrar archivos utilizando la función open()
.
Ejemplo de lectura de archivo:
with open('archivo.txt', 'r') as archivo: contenido = archivo.read() print(contenido)
El uso de with
asegura que el archivo se cierre automáticamente una vez finalizado el bloque.
12. Decoradores:
Los decoradores son una forma de modificar el comportamiento de funciones o métodos. Se usan a menudo en casos como logging, control de acceso, etc.
Ejemplo básico:
def decorador(funcion): def nueva_funcion(): print("Función decorada") funcion() return nueva_funcion @decorador def saludar(): print("Hola!") saludar() # Salida: # Función decorada # Hola!
13. Context Managers:
Los gestores de contexto permiten manejar recursos (como archivos o conexiones) asegurando su correcta liberación una vez finalizados, usando with
.
Ejemplo de un gestor de contexto personalizado:
class MiRecurso: def __enter__(self): print("Recurso abierto") return self def __exit__(self, tipo, valor, traceback): print("Recurso cerrado") with MiRecurso(): print("Usando el recurso") # Salida: # Recurso abierto # Usando el recurso # Recurso cerrado
14. Anotaciones de Tipos:
Python permite anotaciones de tipos para ayudar a la lectura del código y facilitar el uso de herramientas de análisis estático, como mypy
.
Ejemplo:
def suma(a: int, b: int) -> int: return a + b
15. Programación Funcional:
Python admite ciertos conceptos de programación funcional, como las funciones map()
, filter()
, y reduce()
.
- map(): Aplica una función a cada elemento de una secuencia.
cuadrados = list(map(lambda x: x**2, [1, 2, 3]))
- filter(): Filtra elementos que cumplen una condición.
pares = list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4]))
- reduce(): Reduce una secuencia a un solo valor (requiere
functools
).
from functools import reduce suma_total = reduce(lambda x, y: x + y, [1, 2, 3, 4])