Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Множини та кортежі | Ефективне Використання Структур Даних
Техніки Оптимізації в Python

bookМножини та кортежі

Перш ніж перейти до множин і кортежів, важливо зазначити, що словники тут розглядатися не будуть.

Множина

Множина забезпечує середню складність O(1) для вставки, видалення та пошуку, тобто ці операції виконуються за сталий час незалежно від розміру множини. Це робить множини значно швидшими за списки для перевірки наявності елемента та операцій додавання чи видалення, де списки мають складність O(n) (час зростає лінійно із розміром списку) у найгіршому випадку.

Коли використовувати:

  • Потрібні унікальні елементи, що гарантує відсутність дублікатів у колекції;
  • Необхідна швидка перевірка наявності елемента, що робить множини ідеальними для завдань на перевірку існування елемента;
  • Виконуються операції, такі як об'єднання, перетин або різниця множин, які підтримуються оптимізованими методами;
  • Порядок не має значення, оскільки множини не впорядковані й немає потреби зберігати порядок додавання.
1234567891011121314151617181920
# Removing duplicates from a list using a set numbers = [1, 3, 2, 3, 5, 4, 5] unique_numbers = set(numbers) print(f'Unique Numbers: {unique_numbers}') # Fast membership testing names = {'Alice', 'Bob', 'Charlie'} print(f'Is Alice in the set? {"Alice" in names}') print(f'Is Eve in the set? {"Eve" in names}') # Set operations: union, intersection, and difference set_a = {1, 4, 3, 2} set_b = {3, 5, 4, 6} print(f'Union: {set_a.union(set_b)}') print(f'Intersection: {set_a.intersection(set_b)}') print(f'Difference: {set_a.difference(set_b)}') # Removing elements from a set safely with discard names.discard('Alice') # Safe removal, no error if the element doesn't exist print(f'Names after removal: {names}')
copy

Тепер порівняймо продуктивність множини та списку при перевірці наявності елемента:

12345678910111213141516171819
import 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 # Create a large list and set with the same elements large_list = list(range(10000000)) large_set = set(large_list) # Test membership for an element at the end element_to_find = 9999999 @timeit_decorator(number=50) def test_membership(element, collection): return element in collection print('List:') print(test_membership(element_to_find, large_list)) print('Set:') print(test_membership(element_to_find, large_set))
copy

Кортеж

Кортежі зазвичай використовуються, коли потрібно гарантувати незмінність даних або використовувати їх як ключ у dict чи елемент у set (оскільки кортежі є хешованими).

  • Краще за списки: коли потрібні незмінні дані, необхідно використовувати колекцію як ключ словника або елемент множини, або коли потрібне ефективне використання пам’яті для фіксованої кількості елементів;

  • Краще за NumPy-масиви: коли дані є нечисловими або коли важлива незмінність. NumPy-масиви призначені для числових обчислень і за замовчуванням змінні, тоді як кортежі забезпечують безпеку для нечислових даних або невеликих структурованих колекцій, які мають залишатися постійними.

12345678
# Each tuple in the list represents an immutable student record students = [ (1834, 'James', 'Johnson'), (2749, 'Alice', 'Smith'), (4923, 'Bob', 'Brown') ] # Attempting to modify a tuple will raise a TypeError students[0][1] = 'Fred'
copy

Оскільки список students містить записи студентів (ID, ім'я, прізвище), які мають бути тільки для читання, доцільніше використовувати кортежі для кожного запису замість списків. Крім того, як зазначено вище, кортежі трохи більш ефективні за використанням пам'яті порівняно зі списками.

1. Який із наступних сценаріїв найкраще підходить для використання множини замість списку?

2. У вас є набір даних із мільйонами записів, і потрібно часто перевіряти, чи існують у ньому певні значення. Яка структура даних є найбільш ефективною для цієї мети?

3. Ви створюєте запис для кожного студента, який містить унікальний ідентифікатор, ім'я та прізвище. Дані не повинні змінюватися після створення. Яка структура даних буде найбільш доречною?

question mark

Який із наступних сценаріїв найкраще підходить для використання множини замість списку?

Select the correct answer

question mark

У вас є набір даних із мільйонами записів, і потрібно часто перевіряти, чи існують у ньому певні значення. Яка структура даних є найбільш ефективною для цієї мети?

Select the correct answer

question mark

Ви створюєте запис для кожного студента, який містить унікальний ідентифікатор, ім'я та прізвище. Дані не повинні змінюватися після створення. Яка структура даних буде найбільш доречною?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

Can you explain more about when to use sets versus lists?

What are some common use cases for tuples?

Can you show more examples of set operations?

Awesome!

Completion rate improved to 7.69

bookМножини та кортежі

Свайпніть щоб показати меню

Перш ніж перейти до множин і кортежів, важливо зазначити, що словники тут розглядатися не будуть.

Множина

Множина забезпечує середню складність O(1) для вставки, видалення та пошуку, тобто ці операції виконуються за сталий час незалежно від розміру множини. Це робить множини значно швидшими за списки для перевірки наявності елемента та операцій додавання чи видалення, де списки мають складність O(n) (час зростає лінійно із розміром списку) у найгіршому випадку.

Коли використовувати:

  • Потрібні унікальні елементи, що гарантує відсутність дублікатів у колекції;
  • Необхідна швидка перевірка наявності елемента, що робить множини ідеальними для завдань на перевірку існування елемента;
  • Виконуються операції, такі як об'єднання, перетин або різниця множин, які підтримуються оптимізованими методами;
  • Порядок не має значення, оскільки множини не впорядковані й немає потреби зберігати порядок додавання.
1234567891011121314151617181920
# Removing duplicates from a list using a set numbers = [1, 3, 2, 3, 5, 4, 5] unique_numbers = set(numbers) print(f'Unique Numbers: {unique_numbers}') # Fast membership testing names = {'Alice', 'Bob', 'Charlie'} print(f'Is Alice in the set? {"Alice" in names}') print(f'Is Eve in the set? {"Eve" in names}') # Set operations: union, intersection, and difference set_a = {1, 4, 3, 2} set_b = {3, 5, 4, 6} print(f'Union: {set_a.union(set_b)}') print(f'Intersection: {set_a.intersection(set_b)}') print(f'Difference: {set_a.difference(set_b)}') # Removing elements from a set safely with discard names.discard('Alice') # Safe removal, no error if the element doesn't exist print(f'Names after removal: {names}')
copy

Тепер порівняймо продуктивність множини та списку при перевірці наявності елемента:

12345678910111213141516171819
import 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 # Create a large list and set with the same elements large_list = list(range(10000000)) large_set = set(large_list) # Test membership for an element at the end element_to_find = 9999999 @timeit_decorator(number=50) def test_membership(element, collection): return element in collection print('List:') print(test_membership(element_to_find, large_list)) print('Set:') print(test_membership(element_to_find, large_set))
copy

Кортеж

Кортежі зазвичай використовуються, коли потрібно гарантувати незмінність даних або використовувати їх як ключ у dict чи елемент у set (оскільки кортежі є хешованими).

  • Краще за списки: коли потрібні незмінні дані, необхідно використовувати колекцію як ключ словника або елемент множини, або коли потрібне ефективне використання пам’яті для фіксованої кількості елементів;

  • Краще за NumPy-масиви: коли дані є нечисловими або коли важлива незмінність. NumPy-масиви призначені для числових обчислень і за замовчуванням змінні, тоді як кортежі забезпечують безпеку для нечислових даних або невеликих структурованих колекцій, які мають залишатися постійними.

12345678
# Each tuple in the list represents an immutable student record students = [ (1834, 'James', 'Johnson'), (2749, 'Alice', 'Smith'), (4923, 'Bob', 'Brown') ] # Attempting to modify a tuple will raise a TypeError students[0][1] = 'Fred'
copy

Оскільки список students містить записи студентів (ID, ім'я, прізвище), які мають бути тільки для читання, доцільніше використовувати кортежі для кожного запису замість списків. Крім того, як зазначено вище, кортежі трохи більш ефективні за використанням пам'яті порівняно зі списками.

1. Який із наступних сценаріїв найкраще підходить для використання множини замість списку?

2. У вас є набір даних із мільйонами записів, і потрібно часто перевіряти, чи існують у ньому певні значення. Яка структура даних є найбільш ефективною для цієї мети?

3. Ви створюєте запис для кожного студента, який містить унікальний ідентифікатор, ім'я та прізвище. Дані не повинні змінюватися після створення. Яка структура даних буде найбільш доречною?

question mark

Який із наступних сценаріїв найкраще підходить для використання множини замість списку?

Select the correct answer

question mark

У вас є набір даних із мільйонами записів, і потрібно часто перевіряти, чи існують у ньому певні значення. Яка структура даних є найбільш ефективною для цієї мети?

Select the correct answer

question mark

Ви створюєте запис для кожного студента, який містить унікальний ідентифікатор, ім'я та прізвище. Дані не повинні змінюватися після створення. Яка структура даних буде найбільш доречною?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 2
some-alt