Перейти к основному содержимому
Модуль 3 · Урок 4 из 412/36 в курсе~10 min
Уроки модуля (4/4)

Наборы

Набор – это коллекция уникальных неупорядоченных элементов. Три сверхспособности:

  1. Автоматическая дедупликация: добавление одного и того же элемента дважды не имеет никакого эффекта.
  2. Тест на членство O(1): x in s выполняется очень быстро даже с миллионами элементов (он основан на хеше, как и dicts).
  3. Операции над множествами: объединение, пересечение, разность, симметричная разность.

Создание набора

Python
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().

Изменение набора

Python
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

Установить операции

Python
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), …), которые в Кроме того, принимаются любые итерации, а не только множества.

Тест на членство

Python
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). Кроме того, они поддерживают алгебраические операции, такие как объединение (|), пересечение (&) и разность (-).

Попробуйте это

Упражнение#python.m3.l4.e1
Попыток: 0Загрузка…

Учитывая список `nums = [1, 2, 2, 3, 3, 3, 4]`, создайте `unique_items` с уникальными значениями (в любом порядке), а затем вычислите `count` как len(unique_items). Оцените «счет».

Загрузка редактора…
Показать подсказку

set(nums) удаляет дубликаты.

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#python.m3.l4.e2
Попыток: 0Загрузка…

Учитывая `a = {1, 2, 3, 4}` и `b = {3, 4, 5, 6}`, вычислите пересечение в `common_items` и разницу a-b в `only_a`. Оцените кортеж `(common_items, only_a)`.

Загрузка редактора…
Показать подсказку

& пересечение, - разность.

Решение доступно после 3 попыток

Дополнительная задача

Упражнение#python.m3.l4.e3
Попыток: 0Загрузка…

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 попыток