/
pythonpractice
/
pythoncore
Обзор
Документация
Войти
/
pythonpractice
/
pythoncore
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
develop
src/intensive15hours/set.py
150 строк
8 KB
Кузьма Даждъбогин
TSKPTHNPRCTC-6 наборы Set
23 дек 2025, 16:47
23 дек 2025, 16:47
8412910
Код
Авторство
О чём код?
""" Работа с множествами (set) в Python Особенности множества: - Нет порядка элементов, то есть элементы не упорядочены и не поддерживают индексацию - Нет дубликатов, то есть каждый элемент встречается только один раз - Изменяемый тип данных, то есть можно добавлять и удалять элементы - Элементы множества должны быть хешируемыми, другими словами неизменяемыми: str, int, tuple и т.д. - Создание: через фигурные скобки {} или функцию set() """ # ============================================================================= # 0) Краткие описания возможностей # ============================================================================= """ - Изменяемая коллекция: можно добавлять и удалять элементы - Не содержит дубликатов: при добавлении повторяющихся элементов они игнорируются - Неупорядоченная: нет индексов, порядок элементов не гарантируется - Быстрая проверка на вхождение: операция `in` работает за O(1) в среднем - Поддерживает математические операции: объединение, пересечение, разность и др. """ # ============================================================================= # 1) Примеры создания множества # ============================================================================= # Создание через фигурные скобки set_01 = {"text0", "text1", "text2", 3, "text3"} print(f"Создано с помощью {{}}: {set_01}") # Создание через функцию set() empty_set = set() # Важно: {} создаёт словарь, а не пустое множество! print(f"Пустое множество через set(): {empty_set}") # Создание из списка (удаление дубликатов) list_with_duplicates = ["a", "b", "a", "c", "b"] set_from_list = set(list_with_duplicates) print(f"Множество из списка: {set_from_list}") # Создание из строки (разбивается на уникальные символы) set_from_string = set("hello") print(f"Множество из строки 'hello': {set_from_string}") # ============================================================================= # 2) Добавление элементов в множество # ============================================================================= # Добавление одного элемента set_01.add("new_element") print(f"После add(): {set_01}") # ❌ Нельзя добавить изменяемый объект, например список # set_01.add([1, 2]) → TypeError: unhashable type: 'list' # Добавление нескольких элементов через объединение set_01 = set_01 | {"extra1", "extra2"} print(f"После объединения |: {set_01}") # Или с помощью update() set_01.update(["extra3", "extra4"]) print(f"После update(): {set_01}") # ============================================================================= # 3) Удаление элементов из множества # ============================================================================= # Удаление элемента, если он существует set_01.discard("text1") # Никакой ошибки, если элемента нет print(f"После discard('text1'): {set_01}") # Удаление элемента с выбрасыванием ошибки, если его нет set_01.remove("text0") # ❌ Вызовет KeyError, если элемента нет print(f"После remove('text0'): {set_01}") # Извлечение и удаление произвольного элемента popped = set_01.pop() # ❌ Ошибка, если множество пустое print(f"Удалённый элемент: {popped}") print(f"После pop(): {set_01}") # Удаление всех элементов set_01.clear() print(f"После clear(): {set_01}") # set() # ============================================================================= # 4) Поиск элементов # ============================================================================= # ❌ Нет индексов — нельзя искать по индексу # print(set_01[0]) → TypeError: 'set' object is not subscriptable # Проверка наличия элемента — основной способ поиска if "extra1" in set_from_list: print("Элемент 'extra1' найден в множестве") # Множество не поддерживает методы .index() или .count() # ❌ set_from_list.index("a") → AttributeError # ❌ set_from_list.count("a") → AttributeError # ============================================================================= # Дополнительно: операции над множествами # ============================================================================= A = {1, 2, 3, 4} B = {3, 4, 5, 6} C = {1, 2} D = {5, 6, 7} print(f"Объединение A | B: {A | B}") print(f"Пересечение A & B: {A & B}") print(f"Разность A - B: {A - B}") print(f"Симметрическая разность A ^ B: {A ^ B}") print(f"Подмножество C ⊆ A? {C.issubset(A)}") print(f"Надмножество A ⊇ C? {A.issuperset(C)}") print(f"Множества A и D не пересекаются? {A.isdisjoint(D)}") # ============================================================================= # 6) Полезные примеры и особенности # ============================================================================= # Пример 1: Удаление дубликатов из списка original = [1, 2, 2, 3, 3, 3, 4] unique = list(set(original)) print(f"Оригинал: {original} → Уникальные: {unique}") # Пример 2: Проверка наличия общих элементов users_online = {"alice", "bob", "charlie"} banned_users = {"bob", "dave"} if not users_online.isdisjoint(banned_users): print("Есть заблокированные пользователи в онлайне") # Пример 3: Поиск различий в настройках default_perms = {"read", "write", "execute"} user_perms = {"read", "write"} missing = default_perms - user_perms print(f"Не хватает прав: {missing}") # ============================================================================= # 7) Важные замечания # ============================================================================= # ❌ Элементы множества должны быть хешируемыми — нельзя добавлять списки, словари, другие множества # ❌ Нет порядка — нельзя полагаться на последовательность элементов # ❌ Нет индексации — нельзя использовать set[0], set[1] и т.д. # ❌ Пустые фигурные скобки {} создают dict, а не set — для пустого множества используйте set() # ❌ frozenset — неизменяемая версия set, можно использовать как ключ словаря # ✅ Используйте set для быстрой проверки вхождения элемента (вместо списка) # ✅ Используйте set для удаления дубликатов при сохранении уникальности # ✅ Используйте математические операции для логических сравнений множеств # ✅ Используйте frozenset, если нужно неизменяемое множество