Уроки модуля (4/4)
Наборы
Набор – это коллекция уникальных неупорядоченных элементов. Три сверхспособности:
- Автоматическая дедупликация: добавление одного и того же элемента дважды не имеет никакого эффекта.
- Тест на членство O(1):
x in sвыполняется очень быстро даже с миллионами элементов (он основан на хеше, как и dicts). - Операции над множествами: объединение, пересечение, разность, симметричная разность.
Создание набора
vuoto = set() # ATTENZIONE: {} è un dict vuoto, non un set!
numeri = {1, 2, 3}
da_lista = set([1, 1, 2, 3, 3, 3]) # {1, 2, 3}Одни только фигурные скобки {} создают пустой словарь, а не набор: для пустого набора
вам нужен set().
Изменение набора
s = {1, 2, 3}
s.add(4) # {1, 2, 3, 4}
s.add(1) # nessun effetto (già presente)
s.discard(99) # rimuove se presente, silenzioso altrimenti
s.remove(2) # rimuove o solleva KeyErrorУстановить операции
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
a | b # {1, 2, 3, 4, 5, 6} unione
a & b # {3, 4} intersezione
a - b # {1, 2} differenza (in a ma non in b)
a ^ b # {1, 2, 5, 6} differenza simmetrica (xor)Существуют также формы методов (a.union(b), a.intersection(b), …), которые в
Кроме того, принимаются любые итерации, а не только множества.
Тест на членство
parole = {"ciao", "mondo", "python"}
"ciao" in parole # True O(1)
"java" not in parole # TrueДля сравнения: поиск с помощью in внутри list равен O(n) и длится долго.
списки это намного медленнее.
Замороженный набор: неизменяемая версия
frozenset({1, 2, 3}) — это хешируемая версия: это может быть ключ dict или
элемент другого множества.
Настройка операций и производительности
Наборы реализованы в виде хеш-таблиц, что делает проверку членства (x in my_set) чрезвычайно быстрой: она выполняется за постоянное время O(1), в отличие от списков, где поиск занимает линейное время O(n). Кроме того, они поддерживают алгебраические операции, такие как объединение (|), пересечение (&) и разность (-).
Попробуйте это
Учитывая список `nums = [1, 2, 2, 3, 3, 3, 4]`, создайте `unique_items` с уникальными значениями (в любом порядке), а затем вычислите `count` как len(unique_items). Оцените «счет».
Показать подсказку
set(nums) удаляет дубликаты.
Решение доступно после 3 попыток
Обзор упражнения
Учитывая `a = {1, 2, 3, 4}` и `b = {3, 4, 5, 6}`, вычислите пересечение в `common_items` и разницу a-b в `only_a`. Оцените кортеж `(common_items, only_a)`.
Показать подсказку
& пересечение, - разность.
Решение доступно после 3 попыток
Дополнительная задача
Given two sets `set_a = {1, 2, 3}` and `set_b = {2, 3, 4}`, calculate the mathematical intersection of the two sets (their common elements). Store the resulting set in `common_elements` and evaluate it.
Показать подсказку
Вы можете использовать оператор & или метод set_a.intersection(set_b).
Решение доступно после 3 попыток