13 Técnicas Avanzadas de Manipulación de Datos en Python

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)

Etiquetas: Python string-manipulation list-flattening heapq gzip

Publicado el 7-8 16:01