JavaRush /Курси /Модуль 1: Python Core /Робота з множинами

Робота з множинами

Модуль 1: Python Core
Рівень 6 , Лекція 2
Відкрита

3.1 Визначення кількості елементів

Визначити кількість елементів у множині можна за допомогою функції len(). Ця функція повертає кількість унікальних елементів у множині.

Приклад використання функції len()


my_set = {1, 2, 3, 4, 5}
print(len(my_set))  # Вивід: 5
        

У цьому прикладі множина my_set містить п'ять елементів. Функція len() повертає цю кількість.

Перевірка пустоти множини

Ти можеш використовувати функцію len() для перевірки, чи пуста множина. Це корисно в умовах і циклах.


my_set = set()

if len(my_set) == 0:
    print("Множина пуста")
else:
    print("Множина не пуста")
        

3.2 Визначення типу

Якщо ти не знаєш точно, чи зберігається в змінній множина, то для більшої впевненості можеш скористатись функцією type(). Функція type() в Python повертає тип об'єкта. Це корисно для перевірки типу даних, особливо коли ти працюєш з множинами та іншими колекціями даних.

Приклад:


my_set = {1, 2, 3}
print(type(my_set))  # Вивід: <class 'set'>

        

У цьому прикладі type(my_set) повертає <class 'set'>, вказуючи, що my_set є множиною.

Перевірка типу даних

Ти можеш використовувати функцію type() для перевірки типу даних перед виконанням операцій. Це допомагає уникнути помилок, пов'язаних з несумісними типами даних.


def add_element(collection, element):
    if type(collection) is set:
        collection.add(element)
    else:
        print("Помилка: надана колекція не є множиною")
        
my_set = {1, 2, 3}
add_element(my_set, 4)  # Елемент буде додано
add_element([1, 2, 3], 4)  # Виведе помилку
        

У цьому прикладі функція add_element() перевіряє, чи є надана колекція множиною перед додаванням елемента.

Функція type() може бути корисною при створенні складних структур даних, які можуть містити багато різних типів даних. Вона дозволяє динамічно визначати тип даних і відповідно обробляти їх.

Приклад:


my_set = {}
print(type(my_set))  # Вивід: <class 'dict'> 
        

Фігурні дужки використовуються для створення множини і для створення словника (там трохи різний синтаксис всередині). За замовчуванням, якщо в дужках немає елементів — це створення словника!

3.3 Порядок елементів

Множини — це особливий тип колекції даних, який зберігає тільки унікальні елементи. Однією з ключових особливостей множин є те, що вони неупорядковані. Це означає, що елементи множини не мають фіксованого порядку, і порядок елементів може змінюватись при кожній ітерації.

Множини в Python реалізовані на основі хеш-таблиць. Коли ти додаєш елемент до множини, Python обчислює його хеш-значення і використовує його для визначення позиції елемента у хеш-таблиці. Ця структура даних забезпечує швидку перевірку приналежності, додавання та видалення елементів. Проте через використання хеш-значень порядок елементів не зберігається і не може бути передбачений.

Приклад неупорядкованості множин

Розглянемо простий приклад:


my_set = {3, 1, 2}
for item in my_set:
    print(item)
    

При виконанні цього коду елементи можуть бути виведені в будь-якому порядку, наприклад, 1 2 3 або 3 1 2. Це означає, що порядок виведення елементів множини не гарантований і може змінюватись при кожному запуску програми.

Важливість неупорядкованості

Неупорядкованість множин має декілька важливих наслідків:

  • Відсутність індексації: на відміну від списків та кортежів, множини не підтримують доступ до елементів по індексу. Спроба виконати my_set[0] викличе помилку.
  • Продуктивність: Неупорядкованість дозволяє множинам бути ефективними в плані продуктивності, особливо при додаванні та видаленні елементів.
  • Унікальність елементів: Множини автоматично видаляють дублікати, що робить їх корисними для зберігання унікальних даних.
Коментарі (3)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
12 липня 2025
я не виконав завдання без заглядування у відповідь. Але код у відповіді def set_detector(*args): for i in args: if type(i) == set: return True return False collection1 = {1, 2, 3} collection2 = (1, 3, {1, 2, 3}) print(set_detector(collection1)) print(set_detector(collection2)) якщо у функцію передавати не зміну, а список (кортеж), то працює. якщо те саме записую у змінну і передаю через функцію, то не працює. Чомусь функція читає саме змінну як один елемент. Спробував не через *args def set_detector(args): lst_result = [] if type(args) is set: return True else: for i in args: lst_result.append(type(i) is set) for a in lst_result: return True in lst_result тепер знаходить множину.
negoda Рівень 31
18 липня 2025
Проблема в том, что передаваемые тобой в функцию аргументы не распаковывается, то-есть читает переданный аргумент как один элемент. Вот рабочие варинаты как можно исправить положение :

def set_detector(*args):
    for item in args:
        if isinstance(item, set):
            return True
    return False
Если передаешь по одному аргументу.

def set_detector(collection):
    for item in collection:
        if isinstance(item, set):
            return True
    return False
Такой вариант, если передаешь контейнер (список, кортеж и т.п)
19 липня 2025
дякую, ознайомився з тим що * та ** розпаковує. ще можна при викликанні функції передаргументом поставити *