Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Operaciones Eficientes con Cadenas | Mejora del Rendimiento con Herramientas Integradas
Técnicas de Optimización en Python

bookOperaciones Eficientes con Cadenas

Concatenación eficiente de cadenas

Al trabajar con muchas cadenas, es fundamental utilizar el método más eficiente para la concatenación. Utilizar el operador + (+=) de forma repetida resulta ineficiente para grandes conjuntos de datos, ya que crea una nueva cadena en cada operación. En su lugar, emplear str.join() es mucho más rápido y eficiente en el uso de memoria.

A continuación, se compara el rendimiento de dos enfoques para concatenar cadenas con caracteres de nueva línea en una sola cadena. El primero utiliza un bucle for con el operador +=, mientras que el segundo aprovecha el método más eficiente str.join().

1234567891011121314151617181920212223
import os decorators = os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Simulated lines of a report lines = [f"Line {i}" for i in range(1, 1000001)] # Inefficient concatenation @timeit_decorator(number=50) def concat_with_plus(): result = "" for line in lines: result += line + "\n" return result # Efficient concatenation @timeit_decorator(number=50) def concat_with_join(): return "\n".join(lines) + "\n" # Add final newline for consistency result_plus = concat_with_plus() result_join = concat_with_join() print(result_plus == result_join)
copy

Precompilación de expresiones regulares

Al trabajar con expresiones regulares, el rendimiento puede convertirse en un problema, especialmente al tratar con grandes volúmenes de datos o coincidencias de patrones repetitivas. En estos casos, precompilar el patrón es una técnica de optimización útil.

La precompilación garantiza que el motor de expresiones regulares no vuelva a compilar el patrón cada vez que se utiliza, lo que puede mejorar significativamente el rendimiento cuando el mismo patrón se aplica varias veces en un conjunto de datos. Este enfoque es especialmente beneficioso en escenarios como filtrado, validación o búsqueda en archivos de texto grandes.

Comparemos el rendimiento de dos enfoques para validar nombres de usuario utilizando expresiones regulares. El primer enfoque utiliza la función re.match con el patrón definido en línea cada vez que se llama. El segundo enfoque, más eficiente, precompila el patrón de regex usando re.compile y lo reutiliza para todas las validaciones.

1234567891011121314151617181920212223
import os import re decorators = os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Simulated usernames usernames = ["user123", "admin!@#", "test_user", "invalid!"] * 100000 # Naive approach @timeit_decorator(number=10) def validate_with_re(): pattern = r"^\w+$" return [bool(re.match(pattern, username)) for username in usernames] # Optimized approach @timeit_decorator(number=10) def validate_with_compiled_re(): compiled_pattern = re.compile(r"^\w+$") return [bool(compiled_pattern.match(username)) for username in usernames] result_without_precompiling = validate_with_re() result_with_precompiling = validate_with_compiled_re() print(result_without_precompiling == result_with_precompiling)
copy

1. Está generando un informe con 10000 líneas, donde cada línea representa un resumen de transacción. ¿Cuál es el método más eficiente para combinar estas líneas en una sola cadena con ; entre ellas?

2. ¿Por qué precompilar una expresión regular usando re.compile() suele ser más rápido que usar re.match() con un patrón en línea?

question mark

Está generando un informe con 10000 líneas, donde cada línea representa un resumen de transacción. ¿Cuál es el método más eficiente para combinar estas líneas en una sola cadena con ; entre ellas?

Select the correct answer

question mark

¿Por qué precompilar una expresión regular usando re.compile() suele ser más rápido que usar re.match() con un patrón en línea?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 4

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 7.69

bookOperaciones Eficientes con Cadenas

Desliza para mostrar el menú

Concatenación eficiente de cadenas

Al trabajar con muchas cadenas, es fundamental utilizar el método más eficiente para la concatenación. Utilizar el operador + (+=) de forma repetida resulta ineficiente para grandes conjuntos de datos, ya que crea una nueva cadena en cada operación. En su lugar, emplear str.join() es mucho más rápido y eficiente en el uso de memoria.

A continuación, se compara el rendimiento de dos enfoques para concatenar cadenas con caracteres de nueva línea en una sola cadena. El primero utiliza un bucle for con el operador +=, mientras que el segundo aprovecha el método más eficiente str.join().

1234567891011121314151617181920212223
import os decorators = os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Simulated lines of a report lines = [f"Line {i}" for i in range(1, 1000001)] # Inefficient concatenation @timeit_decorator(number=50) def concat_with_plus(): result = "" for line in lines: result += line + "\n" return result # Efficient concatenation @timeit_decorator(number=50) def concat_with_join(): return "\n".join(lines) + "\n" # Add final newline for consistency result_plus = concat_with_plus() result_join = concat_with_join() print(result_plus == result_join)
copy

Precompilación de expresiones regulares

Al trabajar con expresiones regulares, el rendimiento puede convertirse en un problema, especialmente al tratar con grandes volúmenes de datos o coincidencias de patrones repetitivas. En estos casos, precompilar el patrón es una técnica de optimización útil.

La precompilación garantiza que el motor de expresiones regulares no vuelva a compilar el patrón cada vez que se utiliza, lo que puede mejorar significativamente el rendimiento cuando el mismo patrón se aplica varias veces en un conjunto de datos. Este enfoque es especialmente beneficioso en escenarios como filtrado, validación o búsqueda en archivos de texto grandes.

Comparemos el rendimiento de dos enfoques para validar nombres de usuario utilizando expresiones regulares. El primer enfoque utiliza la función re.match con el patrón definido en línea cada vez que se llama. El segundo enfoque, más eficiente, precompila el patrón de regex usando re.compile y lo reutiliza para todas las validaciones.

1234567891011121314151617181920212223
import os import re decorators = os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Simulated usernames usernames = ["user123", "admin!@#", "test_user", "invalid!"] * 100000 # Naive approach @timeit_decorator(number=10) def validate_with_re(): pattern = r"^\w+$" return [bool(re.match(pattern, username)) for username in usernames] # Optimized approach @timeit_decorator(number=10) def validate_with_compiled_re(): compiled_pattern = re.compile(r"^\w+$") return [bool(compiled_pattern.match(username)) for username in usernames] result_without_precompiling = validate_with_re() result_with_precompiling = validate_with_compiled_re() print(result_without_precompiling == result_with_precompiling)
copy

1. Está generando un informe con 10000 líneas, donde cada línea representa un resumen de transacción. ¿Cuál es el método más eficiente para combinar estas líneas en una sola cadena con ; entre ellas?

2. ¿Por qué precompilar una expresión regular usando re.compile() suele ser más rápido que usar re.match() con un patrón en línea?

question mark

Está generando un informe con 10000 líneas, donde cada línea representa un resumen de transacción. ¿Cuál es el método más eficiente para combinar estas líneas en una sola cadena con ; entre ellas?

Select the correct answer

question mark

¿Por qué precompilar una expresión regular usando re.compile() suele ser más rápido que usar re.match() con un patrón en línea?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 4
some-alt