/
Kakady32456
/
pythoncore
Обзор
Документация
Войти
/
Kakady32456
/
pythoncore
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/intensive15hours/tuple.py
181 строка
10 KB
Кузьма Даждъбогин
TSKPTHNPRCTC-4 кортеж tuple
23 дек 2025, 16:53
23 дек 2025, 16:53
be7588f
Код
Авторство
О чём код?
""" Наборы (set) в Python Множество (set) — это неупорядоченная, изменяемая коллекция уникальных элементов. Используется для удаления дубликатов, проверки вхождения, а также математических операций: объединение, пересечение и т.д. - Изменяемая коллекция: можно добавлять и удалять элементы - Не сохраняет порядок элементов - Не поддерживает индексацию и срезы - Не содержит дубликатов: каждый элемент уникален - Элементы должны быть хешируемыми (неизменяемыми): str, int, tuple и т.д. - Поддерживает математические операции над множествами """ # ============================================================================= # 0) Краткие описания возможностей # ============================================================================= """ - Изменяемая коллекция: можно добавлять и удалять элементы - Не сохраняет порядок элементов: при выводе порядок может отличаться - Не поддерживает индексацию и срезы: нельзя обращаться по индексу - Не содержит дубликатов: при добавлении повторяющихся элементов они игнорируются - Элементы должны быть хешируемыми, то есть неизменяемыми типами - Поддерживает математические операции: объединение, пересечение, разность - Быстрая проверка на вхождение: операция `in` выполняется за O(1) в среднем """ # ============================================================================= # 1) Создание множества # ============================================================================= # Пример 1: Создание множества через фигурные скобки set_01 = {"text0", "text1", "text2", 3, "text3"} print(f"{set_01=}") # Пример 2: Создание пустого множества empty_set = set() # Важно: {} создаёт словарь, а не пустое множество! print(f"{empty_set=}, {type(empty_set)=}") # Пример 3: Создание множества из строки (символы как элементы) set_from_string = set("hello") print(f"Множество из строки 'hello': {set_from_string}") # Пример 4: Создание множества из списка (удаление дубликатов) list_with_duplicates = [1, 2, 2, 3, 3, 3] set_from_list = set(list_with_duplicates) print(f"Множество из списка: {set_from_list}") # ❌ Нельзя создать множество из нехешируемых объектов # set_with_list = {[1, 2]} → TypeError: unhashable type: 'list' # ============================================================================= # 2) Добавление элементов # ============================================================================= # Пример 1: Добавление одного элемента set_01.add("new_element") print(f"После add(): {set_01}") # Пример 2: Добавление нескольких элементов через объединение set_01 = set_01 | {"extra1", "extra2"} print(f"После объединения |: {set_01}") # Пример 3: Добавление нескольких элементов через update() set_01.update(["extra3", "extra4"]) print(f"После update(): {set_01}") # ❌ Нельзя добавить изменяемый объект, например список # set_01.add([1, 2]) → TypeError: unhashable type: 'list' # ❌ Нельзя добавить другое множество как единый элемент # set_01.add({1, 2}) → TypeError: unhashable type: 'set' # ============================================================================= # 3) Удаление элементов # ============================================================================= # Пример 1: Удаление элемента, если он существует (без ошибки) set_01.discard("text1") print(f"После discard('text1'): {set_01}") # Пример 2: Удаление элемента с выбрасыванием ошибки, если его нет set_01.remove("text0") # ❌ Вызовет KeyError, если элемента нет print(f"После remove('text0'): {set_01}") # Пример 3: Удаление и возврат произвольного элемента popped = set_01.pop() # ❌ Ошибка, если множество пустое print(f"Удалённый элемент: {popped}") print(f"После pop(): {set_01}") # Пример 4: Удаление всех элементов set_01.clear() print(f"После clear(): {set_01}") # set() # ============================================================================= # 4) Поиск и доступ к элементам # ============================================================================= # ❌ Нельзя обращаться к элементу по индексу — нет порядка # set_01[0] → TypeError: 'set' object is not subscriptable # ❌ Нет методов .index() или .count() — множества не упорядочены # set_01.index("a") → AttributeError # set_01.count("a") → AttributeError # Пример 1: Проверка наличия элемента — основной способ поиска if "extra1" in set_from_list: print("Элемент 'extra1' найден в множестве") # Пример 2: Проверка отсутствия элемента if "missing" not in set_from_list: print("Элемент 'missing' отсутствует") # ============================================================================= # 5) Основные методы и операции # ============================================================================= A = {1, 2, 3, 4} B = {3, 4, 5, 6} C = {1, 2} D = {5, 6, 7} # Объединение: все элементы из A и B union = A | B print(f"Объединение A | B: {union}") # Пересечение: только общие элементы intersection = A & B print(f"Пересечение A & B: {intersection}") # Разность: элементы, которые есть в A, но нет в B difference = A - B print(f"Разность A - B: {difference}") # Симметрическая разность: элементы, которые есть только в одном из множеств symmetric_diff = A ^ B print(f"Симметрическая разность A ^ B: {symmetric_diff}") # Проверка подмножества print(f"C ⊆ A? {C.issubset(A)}") # True # Проверка надмножества print(f"A ⊇ C? {A.issuperset(C)}") # True # Проверка, что множества не пересекаются print(f"A и D не пересекаются? {A.isdisjoint(D)}") # False # ============================================================================= # 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, если нужно неизменяемое множество