Використання модуля Collections
Хоча вбудовані типи даних і масиви NumPy виконують більшість стандартних завдань, модуль collections пропонує спеціалізовані структури даних, розроблені для конкретних випадків використання. Серед них deque (двостороння черга) вирізняється значними перевагами продуктивності в певних сценаріях.
На відміну від списків, які потребують зсуву елементів при вставці або видаленні з початку, deque забезпечує ефективні операції з обох кінців. Тому, якщо часто виникає потреба додавати або видаляти елементи з будь-якого кінця колекції, доцільніше використовувати deque.
Тепер порівняємо продуктивність list і deque на практичному прикладі:
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()
У цьому прикладі створено list та deque, кожен з яких містить 1000000 чисел від 1 до 1000000 включно. Як показано, вставка та видалення елементів на початку значно швидші у структурі deque, ніж у list, і залишаються ефективними незалежно від розміру.
Щодо вставки або видалення елементів на початку, обидві структури — list та deque — можуть виконувати ці операції ефективно. Тому використання deque виключно для цієї мети часто не дає суттєвої переваги.
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)
Результати продуктивності дійсно подібні для обох структур даних. Однак додавання елементів до list є трохи повільнішим, ніж до deque, оскільки списки реалізовані як динамічні масиви і час від часу повинні змінювати розмір, виділяючи більший блок пам'яті та копіюючи елементи. На відміну від цього, блочна структура deque уникає зміни розміру, що забезпечує стабільно швидке додавання елементів. Проте ця різниця стає помітною лише при відносно великих списках.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
What are some real-world use cases for deque?
Can you explain more about how deque is implemented internally?
When should I use a list instead of a deque?
Awesome!
Completion rate improved to 7.69
Використання модуля Collections
Свайпніть щоб показати меню
Хоча вбудовані типи даних і масиви NumPy виконують більшість стандартних завдань, модуль collections пропонує спеціалізовані структури даних, розроблені для конкретних випадків використання. Серед них deque (двостороння черга) вирізняється значними перевагами продуктивності в певних сценаріях.
На відміну від списків, які потребують зсуву елементів при вставці або видаленні з початку, deque забезпечує ефективні операції з обох кінців. Тому, якщо часто виникає потреба додавати або видаляти елементи з будь-якого кінця колекції, доцільніше використовувати deque.
Тепер порівняємо продуктивність list і deque на практичному прикладі:
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()
У цьому прикладі створено list та deque, кожен з яких містить 1000000 чисел від 1 до 1000000 включно. Як показано, вставка та видалення елементів на початку значно швидші у структурі deque, ніж у list, і залишаються ефективними незалежно від розміру.
Щодо вставки або видалення елементів на початку, обидві структури — list та deque — можуть виконувати ці операції ефективно. Тому використання deque виключно для цієї мети часто не дає суттєвої переваги.
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)
Результати продуктивності дійсно подібні для обох структур даних. Однак додавання елементів до list є трохи повільнішим, ніж до deque, оскільки списки реалізовані як динамічні масиви і час від часу повинні змінювати розмір, виділяючи більший блок пам'яті та копіюючи елементи. На відміну від цього, блочна структура deque уникає зміни розміру, що забезпечує стабільно швидке додавання елементів. Проте ця різниця стає помітною лише при відносно великих списках.
Дякуємо за ваш відгук!