>…·····if contents & {'vermouth', 'orange juice'}:
>…·········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():