Чтобы создать множество, вам следует использовать функцию set() или разместить в фигурных скобках одно или несколько разделенных запятыми значений, как показано здесь:

>>> empty_set = set()

>>> empty_set

set()

>>> even_numbers = {0, 2, 4, 6, 8}

>>> even_numbers

{0, 8, 2, 4, 6}

>>> odd_numbers = {1, 3, 5, 7, 9}

>>> odd_numbers

{9, 3, 1, 5, 7}

Как и в случае со словарем, порядок ключей в множестве не имеет значения.

Поскольку пустые квадратные скобки [] создают пустой список, вы могли бы рассчитывать на то, что пустые фигурные скобки {} создают пустое множество. Вместо этого пустые фигурные скобки создают пустой словарь. Именно поэтому интерпретатор выводит пустое множество как set() вместо {}. Почему так происходит? Словари появились в Python раньше и успели захватить фигурные скобки в свое распоряжение.

<p>Преобразование других типов данных с помощью функции set()</p>

Вы можете создать множество из списка, строки, кортежа или словаря, потеряв все повторяющиеся значения.

Для начала взглянем на строку, которая содержит более чем одно включение некоторых букв:

>>> set('letters')

{'l', 'e', 't', 'r', 's'}

Обратите внимание на то, что множество содержит только одно включение букв «e» или «t», несмотря на то, что в слове letters по два включения каждой из них.

Создадим множество из списка:

>>> set(['Dasher', 'Dancer', 'Prancer', 'Mason-Dixon'])

{'Dancer', 'Dasher', 'Prancer', 'Mason-Dixon'}

А теперь из кортежа:

>>> set(('Ummagumma', 'Echoes', 'Atom Heart Mother'))

{'Ummagumma', 'Atom Heart Mother', 'Echoes'}

Когда вы передаете функции set() словарь, она возвращает только ключи:

>>> set({'apple': 'red', 'orange': 'orange', 'cherry': 'red'})

{'apple', 'cherry', 'orange'}

<p>Проверяем на наличие значения с помощью ключевого слова in</p>

Такое использование множеств самое распространенное. Мы создадим словарь, который называется drinks. Каждый ключ будет названием коктейля, а соответствующие значения — множествами ингредиентов:

>>> drinks = {

…·····'martini': {'vodka', 'vermouth'},

…·····'black russian': {'vodka', 'kahlua'},

…·····'white russian': {'cream', 'kahlua', 'vodka'},

…·····'manhattan': {'rye', 'vermouth', 'bitters'},

…·····'screwdriver': {'orange juice', 'vodka'}

…·····}

Несмотря на то что и словарь, и множества окружены фигурными скобками ({ и }), множество — это всего лишь последовательность значений, а словарь — это набор пар «ключ — значение».

Какой из коктейлей содержит в себе водку? (Обратите внимание на то, что для выполнения этих проверок я заранее демонстрирую использование ключевых слов for, if, and и or, которые будут рассмотрены только в следующей главе.)

>>> for name, contents in drinks.items():

…·····if 'vodka' in contents:

…·········print(name)

screwdriver

martini

black russian

white russian

Мы хотим выпить коктейль с водкой, но не переносим лактозу, а вермут на вкус напоминает керосин:

>>> for name, contents in drinks.items():

…·····if 'vodka' in contents and not ('vermouth' in contents or

…·········'cream' in contents):

…·········print(name)

screwdriver

black russian

Перепишем этот пример чуть более сжато в следующем разделе.

<p>Комбинации и операторы</p>

Что, если вам нужно проверить наличие сразу нескольких значений множества? Предположим, вы хотите найти любой напиток, содержащий апельсиновый сок или вермут. Для этого мы используем оператор пересечения множеств (&):

>>> for name, contents in drinks.items():

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги