1. Invertir una Cadena
Existen múltiples formas de invertir una cadena en Python. Una es usar slicing con un paso negativo, y otra es emplear la función reduce de functools.
# Método 1: Slicing inverso
cadena_original = 'hola mundo'
cadena_invertida = cadena_original[::-1]
print(cadena_invertida) # odnum aloh
# Método 2: Usando reduce
from functools import reduce
cadena_invertida_reduce = reduce(lambda a, b: b + a, cadena_original)
print(cadena_invertida_reduce)
2. Verificar si una Cadena es un Palíndromo
Una cadena es un palíndromo si se lee igual de izquierda a derecha que de derecha a izquierda. Esto se puede comprobar comparando la cadena con su versión invertida.
texto1 = 'anilina'
texto2 = 'python'
def es_palindromo(txt):
if txt == txt[::-1]:
print(f'"{txt}" es un palíndromo')
else:
print(f'"{txt}" no es un palíndromo')
es_palindromo(texto1)
es_palindromo(texto2)
3. Extraer Elementos Únicos de una Cadena
Para eliminar caracteres duplicados, se puede convertir la cadena a un conjunto y luego unirla nuevamente.
secuencia = 'aabbccddeeff'
caracteres_unicos = ''.join(set(secuencia))
print(caracteres_unicos) # La salida puede variar en orden
# Ejemplo con una lista
numeros = [10, 20, 30, 10, 20, 40]
numeros_unicos = list(set(numeros))
print(numeros_unicos)
4. Comparar el Contenido de Dos Cadenas
Dos cadenas se consideran equivalentes si contienen los mismos caracteres con la misma frecuencia, independientemente del orden.
from collections import Counter
cadena_a, cadena_b, cadena_c = 'listen', 'silent', 'enlist'
conteo_a, conteo_b, conteo_c = Counter(cadena_a), Counter(cadena_b), Counter(cadena_c)
if conteo_a == conteo_b and conteo_b == conteo_c:
print('Las cadenas contienen los mismos caracteres')
Operaciones con Listas
1. Aplanar Listas Anidadas
Se puede aplanar una lista que contiene sublistas recursivamente o usando bibliotecas externas como iteration_utilities.
from iteration_utilities import deepflatten
estructura_anidada = [[1, 2, [3]], [4, [5, 6]], [7]]
lista_aplanada = list(deepflatten(estructura_anidada))
print(lista_aplanada) # [1, 2, 3, 4, 5, 6, 7]
2. Descomponer Eleemntos de un Iterable
El operador asterisco (*) permite descomponer una secuencia en múltiples partes al asignar variables.
calificaciones = [90, 85, 78, 92, 88]
primera, *intermedias, ultima = calificaciones
print(primera) # 90
print(intermedias) # [85, 78, 92]
print(ultima) # 88
3. Encontrar los N Elementos Más Grandes o Pequeños
La biblioteca heapq ofrece funciones para obtener los n elementos extremos de una lista.
import heapq
datos = [15, 3, 8, 1, 22, 7, 5, 10]
print(heapq.nlargest(3, datos)) # [22, 15, 10]
print(heapq.nsmallest(3, datos)) # [1, 3, 5]
# Ejemplo con diccionarios y una clave personalizada
productos = [
{'nombre': 'Laptop', 'precio': 1200},
{'nombre': 'Teclado', 'precio': 50},
{'nombre': 'Monitor', 'precio': 300},
{'nombre': 'Mouse', 'precio': 25},
]
mas_baratos = heapq.nsmallest(2, productos, key=lambda item: item['precio'])
print(mas_baratos)
Otras Operaciones Útiles
1. Inspeccionar el Uso de Memoria de Objetos
El módulo sys permite verificar el tamaño en bytes de diferentes tipos de objetos en Python.
import sys
texto_corto = 'x'
texto_largo = 'ejemplo extendido'
numero_entero = 42
print(sys.getsizeof(texto_corto)) # Tamaño en bytes
print(sys.getsizeof(texto_largo))
print(sys.getsizeof(numero_entero))
2. Realizar Salidas Formateadas con print
La función print puede redirigir su salida a un archivo y personalizar el separador y el final de línea.
# Escribir en un archivo
with open('registro.txt', 'w') as archivo:
print('Datos guardados aquí', file=archivo)
# Usar separador y fin personalizados
print('Fecha', '2024', '10', '05', sep='-', end='¡Fin!\n')
3. Trabajar con Archivos Comprimidos
Python soporta la lectura y escritura de archivos comprimidos con gzip y bz2.
import gzip
import bz2
# Leer archivo comprimido con gzip
with gzip.open('datos.gz', 'rt') as archivo_gz:
contenido_gz = archivo_gz.read()
# Leer archivo comprimido con bz2
with bz2.open('datos.bz2', 'rt') as archivo_bz2:
contenido_bz2 = archivo_bz2.read()
# Escribir en archivo comprimido con gzip
with gzip.open('salida.gz', 'wt') as archivo_salida_gz:
archivo_salida_gz.write(contenido_gz)
# Escribir en archivo comprimido con bz2
with bz2.open('salida.bz2', 'wt') as archivo_salida_bz2:
archivo_salida_bz2.write(contenido_bz2)