FastCore
Project description
Entiendo la preferencia. El problema técnico real es que un README con bloques de código adentro, metido dentro de OTRO bloque de código, se rompe visualmente. La solución es no envolver todo en un bloque exterior — solo pego el markdown en texto plano, y los bloques de código internos (```python) sí se van a ver como bloques, pero como parte continua del mismo mensaje, sin cortes ni interrupciones de mi parte:
fastcore
Extensión en C para acelerar loops y estructuras de datos comunes en Python. No es un reemplazo completo de tu flujo de trabajo — es una capa delgada que elimina las partes tediosas y repetitivas (agrupar, deduplicar, aplanar, contar frecuencias) que normalmente reescribes a mano en cada proyecto.
Instalación
pip install fastcore
Uso rápido
import fastcore
fastcore.fast_sum([1, 2, 3]) # 6.0 fastcore.count_freq(["a", "b", "a"]) # {'a': 2, 'b': 1} fastcore.unique([3, 1, 2, 1, 3]) # [3, 1, 2] fastcore.filter_gt([1, 5, 10, 3], 4.0) # [5.0, 10.0] fastcore.groupby(lista_de_dicts, "categoria") # dict agrupado fastcore.flatten([1, [2, [3, 4]], 5]) # [1, 2, 3, 4, 5] fastcore.unique_by(lista_de_dicts, "id") # dedup por campo
Documentación de funciones
fast_sum(lista) — Suma todos los elementos numéricos de una lista. fastcore.fast_sum([1, 2, 3, 4.5]) # 10.5
count_freq(lista) — Cuenta cuántas veces aparece cada elemento. Reemplaza un loop de 4 líneas con dict.get() por una sola llamada. fastcore.count_freq(["a", "b", "a", "c", "b", "a"]) # {'a': 3, 'b': 2, 'c': 1}
unique(lista) — Elimina duplicados manteniendo el orden original. Reemplaza el patrón de set() + loop + append. fastcore.unique([3, 1, 2, 1, 3, 4]) # [3, 1, 2, 4]
filter_gt(lista, umbral) — Devuelve solo los elementos mayores al umbral dado. fastcore.filter_gt([1, 5, 10, 3, 8], 4.0) # [5.0, 10.0, 8.0]
groupby(lista_de_dicts, clave) — Agrupa una lista de diccionarios según el valor de una clave. Reemplaza el patrón de dict + setdefault manual. fastcore.groupby(ventas, "categoria") # {'ropa': [...], 'comida': [...]}
flatten(lista_anidada) — Aplana listas anidadas de cualquier profundidad. Reemplaza una función recursiva escrita a mano. fastcore.flatten([1, [2, 3, [4, [5, 6]], 7], 8]) # [1, 2, 3, 4, 5, 6, 7, 8]
unique_by(lista_de_dicts, clave) — Deduplica diccionarios según el valor de un campo específico, no el objeto completo. fastcore.unique_by(ventas, "id") # lista sin ids repetidos
Ejemplo real combinando varias funciones
Sin fastcore (19 líneas): un loop para deduplicar por id con set() + seen, otro loop para agrupar por categoría con dict + setdefault, y un tercer loop anidado para sumar montos por grupo.
Con fastcore (4 líneas):
ventas_unicas = fastcore.unique_by(ventas, "id") grupos = fastcore.groupby(ventas_unicas, "categoria") totales = {cat: fastcore.fast_sum([i["monto"] for i in items]) for cat, items in grupos.items()}
Ambas versiones dan el mismo resultado: {'ropa': 240.0, 'comida': 30.0, 'tech': 500.0}
Resultados de benchmark
Medido con listas de 200,000 y 2,000,000 de elementos, mejor tiempo de 3 corridas:
Con 200,000 elementos: count_freq 1.40x más rápido, unique 1.32x, groupby 2.60x, unique_by 1.17x, flatten 10.70x, fast_sum 1.12x.
Con 2,000,000 elementos: count_freq 1.38x, unique 1.45x, groupby 1.82x, unique_by 1.37x, flatten 6.28x, fast_sum 1.09x.
flatten tiene la mayor ganancia porque en Python puro depende de recursión con overhead de llamadas a función, que en C es casi gratis. groupby gana bien porque evita el overhead del bytecode en el loop principal. Las funciones que ya dependen de dict/set de Python (count_freq, unique, unique_by, fast_sum) ganan menos, porque esas estructuras ya están optimizadas en C por debajo del intérprete — el beneficio ahí es sobre todo la reducción de líneas de código, no la velocidad.
Licencia
MIT License. Ver el archivo LICENSE para el texto completo.
Estado del proyecto
Versión 0.1.0. Cubre patrones comunes de listas y diccionarios (agrupar, deduplicar, aplanar, contar, filtrar, sumar). No pretende reemplazar NumPy para cómputo numérico ni Pandas para análisis de datos tabulares — está enfocado en el trabajo genérico con listas y diccionarios que esas librerías no cubren directamente.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastcorex-0.1.0.tar.gz.
File metadata
- Download URL: fastcorex-0.1.0.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.34.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
769571c4819a2a34c130970c077cbdbb97fcb4f6ab32177eb2e8c83ca5597869
|
|
| MD5 |
f3713016908aa71dd04d74c3af1676e1
|
|
| BLAKE2b-256 |
a7b40e7dddb5c3969760423386e46f0ea02cfb126ae45e933baf02c8c9b1d573
|
File details
Details for the file fastcorex-0.1.0-cp314-cp314-android_24_arm64_v8a.whl.
File metadata
- Download URL: fastcorex-0.1.0-cp314-cp314-android_24_arm64_v8a.whl
- Upload date:
- Size: 15.6 kB
- Tags: Android API level 24+ ARM64 v8a, CPython 3.14
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.34.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9e5ff7354dc325a1087de27c321c4d2c71c6a01dfc5d53b0bd7906a42c27200
|
|
| MD5 |
dab625123fad7f644698809f2c95e12a
|
|
| BLAKE2b-256 |
ab5eef402af03f3bc4ce0bf692c1d0eebe8de9a373dca3dfafc0fa8f24a706ca
|