Вы находитесь на странице: 1из 20

Урок 5

КОРТЕЖИ И
МНОЖЕСТВА.
ЗАДАЧА
«ИНВЕСТОР»

Содержание
Множества........................................................................3
Задача «Инвестор»......................................................10

В этом уроке используются видеоматериалы, которые обозначены


значком PLAY поверх иллюстрации. Щелкните по нему, чтобы
просмотреть видео. Для корректного просмотра видео рекомендуем
открыть урок в программе Foxit PDF Reader.

2
Кортежи и множества. Задача «Инвестор»

Множества
Множества в Python  – изменяемый тип данных,
представляющий собой массив элементов, кото-
рые не повторяются.
Поэтому, чтобы познакомиться с ними ближе, соз-
дадим новый проект на replit.com, в котором пропи-
шем:

our_set = set()
our_set_2 = {0}
print(our_set, type(our_set))
print(our_set_2, type(our_set_2))

Запустим код (видео 1):

Видео 1

Как видим, мы создали множества двумя разными


способами. Но есть нюансы.
При первом способе создания множества, необхо-
димо оставлять скобки пустыми или вставлять итери-
руемый элемент, то есть элемент, который является
массивом данных. Это может быть список или строка,
причем, если передать строку, она будет разбита на зна-
ки.

3
Урок 5

Используя второй способ важно, чтобы при созда-


нии множества внутрь был помещён как минимум один
элемент. Иначе будет создан элемент типа «словарь», с
которым мы познакомимся на следующем занятии.
Создав множества, самое время их наполнить, в чем
поможет метод add(). Запишем:

our_set = set()
our_set_2 = {0}

our_set.add("tomato")
our_set_2.add("potato")

print(our_set)
print(our_set_2)

Получим (видео 2):

Видео 2

4
Кортежи и множества. Задача «Инвестор»

Аналогично предыдущим типам данных, можно уз-


нать количество элементов с помощью функции len()
(видео 3).

Видео 3

А как узнать, есть ли элемент во множестве? Напри-


мер, проверить наличие переменной х в наших множе-
ствах, можно воспользовавшись синтаксисом:

our_set = set()
our_set_2 = {0}

x = "tomato"

our_set.add("tomato")
our_set_2.add("potato")

print(x in our_set)
print(x in our_set_2)

5
Урок 5

Запустим код (видео 4):

Видео 4

Как видим, в первом случае вернулось значение


True, следовательно элемент присутствует. Когда эле-
мент отсутствует, возвращается значение False, как во
втором случае.
Чтобы лучше представлять себе множества, изобра-
зим их в виде кругов (рис. 1).

Рисунок 1

Поскольку множество our_set_2 больше our_set,


то и круг его будет больше.

6
Кортежи и множества. Задача «Инвестор»

Как видим, сейчас наши множества мирно сосуще-


ствуют рядом, не касаясь и не пересекая друг друга, а
следовательно не имеют общих элементов. Убедиться в
этом можно с помощью метода isdisjoint(), кото-
рый возвращает значение True, если во множествах нет
общих элементов:

our_set = set()
our_set_2 = {0}

our_set.add("tomato")
our_set_2.add("potato")

print(our_set.isdisjoint(our_set_2))

Результат (видео 5):

Видео 5

Несмотря на отсутствие общих элементов, множе-


ство можно расширить с помощью метода update()
или же объединить множества методом union(), запи-
сав их в отдельной переменной:

7
Урок 5

our_set = set()
our_set_2 = {0}

our_set.add("tomato")
our_set_2.add("potato")

our_set_3 = our_set.union(our_set_2)
our_set.update(our_set_2)
print(our_set_3)
print(our_set)

Запустим код (видео 6):

Видео 6

Как выглядят эти операции можно представить, по-


смотрев на рисунок 2 на странице 9.
Как видим, множество может содержать в себе дру-
гое множество, а для проверки этого используют ме-
тод issubset(), который возвращает значение True,
если все элементы множества принадлежат множеству

8
Кортежи и множества. Задача «Инвестор»

внутри скобок. Если же необходимо проверить, при-


надлежит ли множество внутри скобок множеству, вы-
званному методом, используется метод issuperset().

Рисунок 2

Проверим:

our_set = set()
our_set_2 = {0}

our_set.add("tomato")
our_set_2.add("potato")

our_set_3 = our_set.union(our_set_2)
our_set.update(our_set_2)
print(our_set_2.issubset(our_set_3))
print(our_set_3.issuperset(our_set_2))

Получим результат, показанный в видео 7 на стра-


нице 10.

9
Урок 5

Видео 7

Задача «Инвестор»
А теперь, представим, что мы – инвесторы (рис. 3).
У нас есть перечень товаров, в которые мы вклады-
ваем средства, они находятся во множестве под назва-
нием our_products.

Рисунок 3

10
Кортежи и множества. Задача «Инвестор»

В последнее время инвестиции принесли значитель-


ную прибыль, поэтому надо выбрать, куда именно вло-
жить деньги сейчас. Мы получили перечень компаний с
их товарами. Ассортимент компаний находится во мно-
жествах range_of_company_1, range_of_company_2
и range_of_company_3.
Но как понять, в какую именно компанию вклады-
вать деньги?
Конечно в ту, ассортимент которой совпадает с
нашими целевыми товарами. Поэтому, чтобы полу-
чить множество общих товаров, используем метод
intersection():

our_products = {"Apple", "Tesla", "McDonald's"}


range_of_the_company_1 = {"Samsung", "Sony"}
range_of_the_company_2 = {"Apple","IBM","Tesla"}
range_of_the_company_3 = {"BMW", "Tesla",
"Ferrari"}

print(our_products.intersection(range_of_the_
company_1))
print(our_products.intersection(range_of_the_
company_2))
print(our_products.intersection(range_of_the_
company_3))

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


видео 8 на странице 12.

11
Урок 5

Видео 8

Как видим, больше всего совпадений у нас со второй


компанией, следовательно именно в неё надо инвести-
ровать.
А может возникнуть противоположная задача  –
узнать, что компании должны добавить в свой ассорти-
мент, чтобы заинтересовать нас как инвесторов. Тогда
воспользуемся методом difference():

our_products = {"Apple", "Tesla", "McDonald's"}


range_of_the_company_1 = {"Samsung", "Sony"}
range_of_the_company_2 = {"Apple","IBM","Tesla"}
range_of_the_company_3 = {"BMW", "Tesla",
"Ferrari"}

print(our_products.difference(range_of_the_
company_1))
print(our_products.difference(range_of_the_
company_2))
print(our_products.difference(range_of_the_
company_3))

12
Кортежи и множества. Задача «Инвестор»

Результат (видео 9):

Видео 9

Мы успешно инвестировали, осталось узнать


разницу в товарах, для чего воспользуемся методом
symmetric_difference():

our_products = {"Apple", "Tesla", "McDonald's"}


range_of_the_company_2 = {"Apple","IBM","Tesla"}

print(our_products.symmetric_difference(range_
of_the_company_2))

Получим (видео 10):

Видео 10

Но методы intersection(), difference() и


symmetric_difference() не изменяют множеств, из
которых они вызываются.

13
Урок 5

Поэтому есть аналогичные по функционалу методы,


которые могут это делать:
■■ intersection_update() – оставляет общие элементы
для двух множеств (видео 11):

Видео 11

■■ difference_update() – оставляет элементы, которых


нет в другом множестве (видео 12):

Видео 12

■■ symmetric_difference_update() – оставляет уни-


кальные элементы двух множеств (видео 13):

Видео 13

Мы уже добавляли к множествам элементы, но как


их убрать оттуда?

14
Кортежи и множества. Задача «Инвестор»

Помогут методы discard() и remove(), где внутрь


скобок передаём элемент, который надо удалить. Раз-
ница между ними заключается в том, что при вводе в
первый метод элемента, который не существует, он от-
работает нормально, а второй повлечёт ошибку.
Удалим строки "Apple" и "McDonald's" из ас-
сортимента. Дополнительно удалим несуществующую
строку "Mercedes":
our_products = {"Apple", "Tesla", "McDonald's"}

our_products.discard("Apple")
our_products.discard("Mercedes")
print(our_products)
our_products.remove("McDonald's")
print(our_products)
our_products.remove("Mercedes")

Результат (видео 14):

Видео 14

Аналогично спискам, множества имеют метод


pop(). И внутри множества элементы располагаются в

15
Урок 5

произвольном порядке, следовательно неизвестно, ка-


кой элемент будет исключен (видео 15):

Видео 15

Поэтому надо быть внимательным, пользуясь этим


методом (видео 16).

Видео 16

Как мы уже знаем, неизменяемые типы данных


предназначены для защиты от изменений. Как множе-
ства, так и списки имеют своих «коллег» с неизменным
типом данных: для множеств – это frozenset, а для
списков – кортежи. Для обоих типов данных доступны
все те же методы и функции, что и для их изменяемых
протеже, кроме тех, которые меняют данные.
Создадим frozenset и кортежи:

my_frozenset = frozenset()
print(type(my_frozenset))
my_tuple = tuple()

16
Кортежи и множества. Задача «Инвестор»

print(type(my_tuple))
my_tuple_2 = (0,)
print(type(my_tuple_2))
my_tuple_3 = 0,
print(type(my_tuple_3))
my_tuple_4 = (0)
print(type(my_tuple_4))

Результат (видео 17):

Видео 17

Как видим, здесь мы создали frozenset и три кор-


тежа, причем последние создавались разными способа-
ми.
Важно, чтобы при создании frozenset внутрь ско-
бок передавались итерируемые элементы или же скобки
должны быть пустыми. В ином случае Python сообщит
об ошибке. Те же требования действуют и к кортежу,
созданному первым способом.

17
Урок 5

Теперь обратите внимание на кортежи, созданные


вторым и третьим способами: создавая кортежи этими
способами важно передать по крайней мере один эле-
мент, после которого обязательно указать запятую. Зато
скобки не являются обязательными. Если опустить за-
пятую и оставить скобки, увидим, что Python не создаст
кортеж.

Сегодня мы рассмотрели множества и решили за-


дачку для инвестора, познакомились с frozenset и
кортежами.
А на следующем занятии нас ждёт ещё более инте-
ресный и мощный тип данных, который значитель-
но расширит наши возможности в Python.

18
Кортежи и множества. Задача «Инвестор»

19
Урок 5
КОРТЕЖИ И МНОЖЕСТВА.
ЗАДАЧА «ИНВЕСТОР»

© Компьютерная Академия ШАГ


www.itstep.org

Все права на охраняемые авторским правом фото-, аудио- и видеопроизведения,


фрагменты которых использованы в материале, принадлежат их законным владель-
цам. Фрагменты произведений используются в иллюстративных целях в объеме,
оправданном поставленной задачей, в рамках учебного процесса и в учебных целях,
в соответствии со ст. 1274 ч. 4 ГК РФ и ст. 21 и 23 Закона Украины «Про авторське
право і суміжні права». Объем и способ цитируемых произведений соответствует
принятым нормам, не наносит ущерба нормальному использованию объектов
авторского права и не ущемляет законные интересы автора и правообладателей.
Цитируемые фрагменты произведений на момент использования не могут быть
заменены альтернативными, не охраняемыми авторским правом аналогами, и
как таковые соответствуют критериям добросовестного использования и честного
использования.
Все права защищены. Полное или частичное копирование материалов запрещено.
Согласование использования произведений или их фрагментов производится
с авторами и правообладателями. Согласованное использование материалов
возможно только при указании источника.
Ответственность за несанкционированное копирование и коммерческое исполь-
зование материалов определяется действующим законодательством Украины.

Вам также может понравиться