…·········print(name)
…
screwdriver
martini
manhattan
Результатом работы оператора & является множество, содержащее все элементы, которые находятся в обоих сравниваемых списках. Если ни один из заданных ингредиентов не содержится в предлагаемых коктейлях, оператор & вернет пустое множество. Этот результат можно считать равным False.
Теперь перепишем пример из предыдущего раздела, в котором мы хотели водки, не смешанной со сливками или вермутом:
>>> for name, contents in drinks.items():
…·····if 'vodka' in contents and not contents & {'vermouth', 'cream'}:
…·········print(name)
…
screwdriver
black russian
Сохраним множества ингредиентов для этих двух напитков в переменных, чтобы нам не пришлось набирать много текста в дальнейших примерах:
>>> bruss = drinks['black russian']
>>> wruss = drinks['white russian']
В следующих примерах демонстрируется использование операторов множеств. В одних из них демонстрируется применение особой пунктуации, в других — особых функций, в третьих — и того и другого. Мы будем использовать тестовые множества а (содержит элементы 1 и 2) и b (содержит элементы 2 и 3):
>>> a = {1, 2}
>>> b = {2, 3}
Пересечение множеств (члены обоих множеств) можно получить с помощью особого пунктуационного символа & или функции множества intersection(), как показано здесь:
>>> a & b
{2}
>>> a.intersection(b)
{2}
В этом фрагменте используются сохраненные нами переменные:
>>> bruss & wruss
{'kahlua', 'vodka'}
В этом примере мы получаем объединение (члены обоих множеств), используя оператор | или функцию множества union():
>>> a | b
{1, 2, 3}
>>> a.union(b)
{1, 2, 3}
Алкогольная версия:
>>> bruss | wruss
{'cream', 'kahlua', 'vodka'}
Разность множеств (члены только первого множества, но не второго) можно получить с помощью символа — или функции difference():
>>> a — b
{1}
>>> a.difference(b)
{1}
>>> bruss — wruss
set()
>>> wruss — bruss
{'cream'}
Самыми распространенными операциями с множествами являются объединение, пересечение и разность. Для полноты картины я включил в этот раздел и остальные операции, но вы, возможно, никогда не будете их использовать.
Для выполнения исключающего ИЛИ (элементы или первого, или второго множества, но не общие) используйте оператор ^ или функцию symmetric_difference():
>>> a ^ b
{1, 3}
>>> a.symmetric_difference(b)
{1, 3}
В этом примере определяется эксклюзивный ингредиент для русских напитков:
>>> bruss ^ wruss
{'cream'}
Вы можете проверить, является ли одно множество подмножеством другого (все члены первого множества являются членами второго), с помощью оператора <= или функции issubset():
>>> a <= b
False
>>> a.issubset(b)
False
Добавление сливок в коктейль «черный русский» сделает его «белым русским», поэтому wruss является подмножеством bruss:
>>> bruss <= wruss
True
Является ли любое множество подмножеством самого себя? Ага.
>>> a <= a
True
>>> a.issubset(a)
True
Для того чтобы стать собственным подмножеством, второе множество должно содержать все члены первого и несколько других. Определяется это с помощью оператора <:
>>> a < b
False
>>> a < a
False
>>> bruss < wruss
True
Множество множеств противоположно подмножеству (все члены второго множества являются также членами первого). Для определения этого используется оператор >= или функция issuperset():
>>> a >= b
False
>>> a.issuperset(b)
False
>>> wruss >= bruss
True
Любое множество является множеством множеств самого себя:
>>> a >= a
True
>>> a.issuperset(a)
True
И наконец, вы можете найти собственное множество множеств (первое множество содержит все члены второго и несколько других) с помощью оператора >:
>>> a > b
False
>>> wruss > bruss