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

bookMaximización de la Eficiencia de Ordenamiento

Ordenación incorporada

Siempre que sea necesario ordenar una lista, salvo en algunos casos especiales poco frecuentes, casi siempre es preferible utilizar una de sus dos herramientas de ordenación altamente optimizadas: la función sorted() o el método sort(). Ambas están implementadas en C y utilizan Timsort, un algoritmo híbrido que combina merge sort e insertion sort para lograr eficiencia.

sorted() es ideal para la ordenación de propósito general cuando se necesita ordenar cualquier iterable sin modificar los datos originales. Por otro lado, sort() es más adecuado para listas cuando se acepta la modificación en el lugar.

sorted_list = sorted(some_list)  # Returns a new sorted list
some_list.sort()  # Sorts the list in place

Ambos métodos son eficientes, pero list.sort() puede ser solo ligeramente más rápido para listas muy grandes ya que evita crear una nueva lista. Sin embargo, utilice sorted() si necesita mantener intacta la lista original.

Ordenación parcial con heapq

En los casos en que solo se necesitan los elementos más pequeños o más grandes de un conjunto de datos, no es necesario ordenar todos los datos. El módulo heapq proporciona métodos eficientes como heapq.nsmallest() y heapq.nlargest() para extraer estos elementos sin ordenar completamente el iterable, lo que lo hace más rápido y eficiente en memoria.

Comparemos el rendimiento de la función sorted() y la función heapq.nsmallest() para obtener los 10 números más pequeños de una lista:

1234567891011121314151617181920212223
import heapq 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 import random # Generate a large list of random integers numbers = [random.randint(1, 1000000) for _ in range(1000000)] @timeit_decorator(number=10) def partial_sort_heapq(): return heapq.nsmallest(10, numbers) @timeit_decorator(number=10) def partial_sort_sorted(): return sorted(numbers)[:10] # Compare performance heapq_result = partial_sort_heapq() sorted_result = partial_sort_sorted() # Ensure both methods give the same result print(heapq_result == sorted_result)
copy

Como puedes observar, en nuestro ejemplo particular heapq.nsmallest() es aproximadamente 10 veces más rápido.

Sin embargo, si la cantidad de elementos más grandes o más pequeños (n) que deseas obtener es cercana al número total de elementos en la lista, heapq suele ser más lento que la función sorted() o el método .sort().

Por ejemplo, ahora obtendremos los 100000 elementos más pequeños de la lista:

1234567891011121314151617181920212223
import heapq 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 import random # Generate a large list of random integers numbers = [random.randint(1, 1000000) for _ in range(1000000)] @timeit_decorator(number=10) def partial_sort_heapq(): return heapq.nsmallest(100000, numbers) @timeit_decorator(number=10) def partial_sort_sorted(): return sorted(numbers)[:100000] # Compare performance heapq_result = partial_sort_heapq() sorted_result = partial_sort_sorted() # Ensure both methods give the same result print(heapq_result == sorted_result)
copy

En este caso, la función sorted() supera claramente a heapq en rendimiento.

1. Necesita ordenar una lista completa de números manteniendo la lista original intacta. ¿Qué función/método de ordenamiento debería utilizar?

2. Está revisando un conjunto de datos de 500,000 registros de ventas. Para identificar las 20 transacciones con mayor generación de ingresos, ¿qué enfoque probablemente será más rápido y eficiente en memoria?

question mark

Necesita ordenar una lista completa de números manteniendo la lista original intacta. ¿Qué función/método de ordenamiento debería utilizar?

Select the correct answer

question mark

Está revisando un conjunto de datos de 500,000 registros de ventas. Para identificar las 20 transacciones con mayor generación de ingresos, ¿qué enfoque probablemente será más rápido y eficiente en memoria?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3

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

bookMaximización de la Eficiencia de Ordenamiento

Desliza para mostrar el menú

Ordenación incorporada

Siempre que sea necesario ordenar una lista, salvo en algunos casos especiales poco frecuentes, casi siempre es preferible utilizar una de sus dos herramientas de ordenación altamente optimizadas: la función sorted() o el método sort(). Ambas están implementadas en C y utilizan Timsort, un algoritmo híbrido que combina merge sort e insertion sort para lograr eficiencia.

sorted() es ideal para la ordenación de propósito general cuando se necesita ordenar cualquier iterable sin modificar los datos originales. Por otro lado, sort() es más adecuado para listas cuando se acepta la modificación en el lugar.

sorted_list = sorted(some_list)  # Returns a new sorted list
some_list.sort()  # Sorts the list in place

Ambos métodos son eficientes, pero list.sort() puede ser solo ligeramente más rápido para listas muy grandes ya que evita crear una nueva lista. Sin embargo, utilice sorted() si necesita mantener intacta la lista original.

Ordenación parcial con heapq

En los casos en que solo se necesitan los elementos más pequeños o más grandes de un conjunto de datos, no es necesario ordenar todos los datos. El módulo heapq proporciona métodos eficientes como heapq.nsmallest() y heapq.nlargest() para extraer estos elementos sin ordenar completamente el iterable, lo que lo hace más rápido y eficiente en memoria.

Comparemos el rendimiento de la función sorted() y la función heapq.nsmallest() para obtener los 10 números más pequeños de una lista:

1234567891011121314151617181920212223
import heapq 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 import random # Generate a large list of random integers numbers = [random.randint(1, 1000000) for _ in range(1000000)] @timeit_decorator(number=10) def partial_sort_heapq(): return heapq.nsmallest(10, numbers) @timeit_decorator(number=10) def partial_sort_sorted(): return sorted(numbers)[:10] # Compare performance heapq_result = partial_sort_heapq() sorted_result = partial_sort_sorted() # Ensure both methods give the same result print(heapq_result == sorted_result)
copy

Como puedes observar, en nuestro ejemplo particular heapq.nsmallest() es aproximadamente 10 veces más rápido.

Sin embargo, si la cantidad de elementos más grandes o más pequeños (n) que deseas obtener es cercana al número total de elementos en la lista, heapq suele ser más lento que la función sorted() o el método .sort().

Por ejemplo, ahora obtendremos los 100000 elementos más pequeños de la lista:

1234567891011121314151617181920212223
import heapq 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 import random # Generate a large list of random integers numbers = [random.randint(1, 1000000) for _ in range(1000000)] @timeit_decorator(number=10) def partial_sort_heapq(): return heapq.nsmallest(100000, numbers) @timeit_decorator(number=10) def partial_sort_sorted(): return sorted(numbers)[:100000] # Compare performance heapq_result = partial_sort_heapq() sorted_result = partial_sort_sorted() # Ensure both methods give the same result print(heapq_result == sorted_result)
copy

En este caso, la función sorted() supera claramente a heapq en rendimiento.

1. Necesita ordenar una lista completa de números manteniendo la lista original intacta. ¿Qué función/método de ordenamiento debería utilizar?

2. Está revisando un conjunto de datos de 500,000 registros de ventas. Para identificar las 20 transacciones con mayor generación de ingresos, ¿qué enfoque probablemente será más rápido y eficiente en memoria?

question mark

Necesita ordenar una lista completa de números manteniendo la lista original intacta. ¿Qué función/método de ordenamiento debería utilizar?

Select the correct answer

question mark

Está revisando un conjunto de datos de 500,000 registros de ventas. Para identificar las 20 transacciones con mayor generación de ingresos, ¿qué enfoque probablemente será más rápido y eficiente en memoria?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

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