Uso del Módulo Collections
Aunque los tipos de datos integrados y los arrays de NumPy cubren la mayoría de las tareas comunes, el módulo collections ofrece estructuras de datos especializadas diseñadas para casos de uso específicos. Entre ellas, deque (cola de doble extremo) destaca por sus importantes beneficios de rendimiento en ciertos escenarios.
A diferencia de las listas, que requieren desplazar elementos al insertar o eliminar desde el principio, un deque permite operaciones eficientes en ambos extremos. Por lo tanto, si necesitas agregar o eliminar elementos frecuentemente desde cualquiera de los extremos de una colección, un deque es una mejor opción.
Ahora, comparemos el rendimiento de list y deque en un escenario práctico:
123456789101112131415161718192021222324252627282930import os 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 from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def list_append_left(): # Insert -1 at the beginning numbers_list.insert(0, -1) @timeit_decorator(number=1000) def deque_append_left(): numbers_deque.appendleft(-1) @timeit_decorator(number=1000) def list_pop_left(): # Remove the element at index 0 (first element) numbers_list.pop(0) @timeit_decorator(number=1000) def deque_pop_left(): numbers_deque.popleft() list_append_left() deque_append_left() list_pop_left() deque_pop_left()
En este ejemplo, se ha creado una list y una deque, cada una conteniendo 1,000,000 de números del 1 al 1,000,000 inclusive. Como se muestra, insertar y eliminar elementos al principio es mucho más rápido en una deque que en una list y permanece eficiente independientemente del tamaño.
Cuando se trata de insertar o eliminar elementos al principio, tanto list como deque pueden manejar estas tareas de manera eficiente. Por lo tanto, utilizar una deque únicamente para este propósito a menudo no proporciona una ventaja significativa.
1234567891011121314151617181920212223import os 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 from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def append_right(data_structure): data_structure.append(-1) @timeit_decorator(number=1000) def pop_right(data_structure): data_structure.pop() print('List performance:') append_right(numbers_list) pop_right(numbers_list) print('Dequeue performance:') append_right(numbers_deque) pop_right(numbers_deque)
Los resultados de rendimiento son, en efecto, similares para ambas estructuras de datos. Sin embargo, agregar elementos a una list es ligeramente más lento que hacerlo en una deque, ya que las listas, implementadas como arreglos dinámicos, ocasionalmente necesitan redimensionarse al asignar un bloque de memoria más grande y copiar los elementos. En contraste, la estructura basada en bloques de deque evita la redimensión, haciendo que las inserciones sean consistentemente más rápidas. Sin embargo, esta diferencia solo se vuelve notable con listas relativamente grandes.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 7.69
Uso del Módulo Collections
Desliza para mostrar el menú
Aunque los tipos de datos integrados y los arrays de NumPy cubren la mayoría de las tareas comunes, el módulo collections ofrece estructuras de datos especializadas diseñadas para casos de uso específicos. Entre ellas, deque (cola de doble extremo) destaca por sus importantes beneficios de rendimiento en ciertos escenarios.
A diferencia de las listas, que requieren desplazar elementos al insertar o eliminar desde el principio, un deque permite operaciones eficientes en ambos extremos. Por lo tanto, si necesitas agregar o eliminar elementos frecuentemente desde cualquiera de los extremos de una colección, un deque es una mejor opción.
Ahora, comparemos el rendimiento de list y deque en un escenario práctico:
123456789101112131415161718192021222324252627282930import os 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 from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def list_append_left(): # Insert -1 at the beginning numbers_list.insert(0, -1) @timeit_decorator(number=1000) def deque_append_left(): numbers_deque.appendleft(-1) @timeit_decorator(number=1000) def list_pop_left(): # Remove the element at index 0 (first element) numbers_list.pop(0) @timeit_decorator(number=1000) def deque_pop_left(): numbers_deque.popleft() list_append_left() deque_append_left() list_pop_left() deque_pop_left()
En este ejemplo, se ha creado una list y una deque, cada una conteniendo 1,000,000 de números del 1 al 1,000,000 inclusive. Como se muestra, insertar y eliminar elementos al principio es mucho más rápido en una deque que en una list y permanece eficiente independientemente del tamaño.
Cuando se trata de insertar o eliminar elementos al principio, tanto list como deque pueden manejar estas tareas de manera eficiente. Por lo tanto, utilizar una deque únicamente para este propósito a menudo no proporciona una ventaja significativa.
1234567891011121314151617181920212223import os 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 from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def append_right(data_structure): data_structure.append(-1) @timeit_decorator(number=1000) def pop_right(data_structure): data_structure.pop() print('List performance:') append_right(numbers_list) pop_right(numbers_list) print('Dequeue performance:') append_right(numbers_deque) pop_right(numbers_deque)
Los resultados de rendimiento son, en efecto, similares para ambas estructuras de datos. Sin embargo, agregar elementos a una list es ligeramente más lento que hacerlo en una deque, ya que las listas, implementadas como arreglos dinámicos, ocasionalmente necesitan redimensionarse al asignar un bloque de memoria más grande y copiar los elementos. En contraste, la estructura basada en bloques de deque evita la redimensión, haciendo que las inserciones sean consistentemente más rápidas. Sin embargo, esta diferencia solo se vuelve notable con listas relativamente grandes.
¡Gracias por tus comentarios!