Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
В Python есть очень полезный тип данных для работы с множествами – это set. Об
этом типе данных, примерах использования, и небольшой выдержке из теории
множеств пойдёт речь далее.
Множество
Множества в Python
print(type(wrong_empty_set))
# Вывод
<class "dict">
correct_empty_set = set()
print(type(correct_empty_set))
# Вывод
<class "set">
color_set = set(color_list)
print(color_set)
# Вывод (порядок может быть другим):
numbers = [1, 2, 2, 2, 3, 3, 4, 4, 5, 6]
even_numbers = {
if number % 2 == 0
print(even_numbers)
{2, 4, 6}
Хешируемые объекты
Существует ограничение, что элементами множества (как и ключами словарей) в
Python могут быть только так называемые хешируемые (Hashable) объекты. Это
обусловлено тем фактом, что внутренняя реализация set основана на хеш-
таблицах. Например, списки и словари – это изменяемые объекты, которые не
могут быть элементами множеств. Большинство неизменяемых типов в Python
(int, float, str, bool, и т.д.) – хешируемые. Неизменяемые коллекции, например tuple,
являются хешируемыми, если хешируемы все их элементы.
records = {
("Москва", 17_200_000),
("Санкт-Петербург", 5_400_000),
("Новосибирск", 1_600_000),
("Москва", 17_200_000),
print(city)
Москва
Новосибирск
Санкт-Петербург
class City:
self.name = name
"""
return f'City("{self.name}")'
print(City("Moscow") == City("Moscow"))
# Вывод:
False
print(cities)
# Вывод
{City("Moscow"), City("Moscow")}
class City:
self._name = name
"""
"""
if not isinstance(other, self.__class__):
return False
"""
return f'City("{self._name}")'
moscow = City("Moscow")
moscow_again = City("Moscow")
# Вывод:
True
# Теперь множество городов работает более логично и интуитивно
print(cities)
{City("Kazan"), City("Moscow")}
Свойства множеств
Принадлежность множеству
print("Green is there!")
else:
# Вывод:
Green is there!
if "purple" in tremendously_huge_set:
print("Purple is there!")
else:
# Вывод:
Мощность множества
# Мощность множества
cardinality = len(even_numbers)
print(cardinality)
# Вывод:
50
print(color)
red
green
blue
color_counter = dict.fromkeys(colors, 1)
print(color_counter)
Равные множества
Тут всё довольно просто – два множества называются равными, если они состоят
из одних и тех же элементов. Как следует из определения множества, порядок этих
элементов не важен.
my_fruits = {"banana", "apple", "orange", "orange"}
print(my_fruits == your_fruits)
# Вывод:
True
Непересекающиеся множества
Если два множества не имеют общих элементов, то говорят, что эти множества не
пересекаются. Или другими словами, пересечение этих множеств является пустым
множеством.
if even_numbers.isdisjoint(odd_numbers):
print("Множества не пересекаются!")
# Вывод:
Множества не пересекаются!
Подмножество и надмножество
natural_numbers = set(range(100))
# натуральных чисел
if fibonacci_numbers.issubset(natural_numbers):
print("Подмножество!")
# Вывод:
Подмножество!
if natural_numbers.issuperset(fibonacci_numbers):
print("Надмножество!")
# Вывод:
Надмножество!
empty = set()
print(
empty.issubset(range(100))
and empty.issubset(["red", "green", "blue"])
and empty.issubset(set())
# Вывод:
True
natural_numbers = set(range(100))
if natural_numbers.issubset(natural_numbers):
print("Подмножество!")
# Вывод:
Подмножество!
Объединение множеств
Объединение множеств – это множество, которое содержит все элементы
исходных множеств. В Python есть несколько способов объединить множества,
давайте рассмотрим их на примерах.
print(our_fruits)
print(our_fruits)
colors.add("purple")
# это множество
colors.add("red")
print(colors)
т.п.)
numbers = {1, 2, 3}
print(numbers)
{1, 2, 3, 4, 9}
Пересечение множеств
Пересечение множеств – это множество, в котором находятся только те элементы,
которые принадлежат исходным множествам одновременно.
"""
"""
a, b = 0, 1
return a + b == number
# числами Фибоначчи
prime_fibonacci = primes.intersection(fibonacci)
print(prime_fibonacci)
Разность множеств
Разность двух множеств – это множество, в которое входят все элементы первого
множества, не входящие во второе множество.
you_know: dict = {
"Go": 0.4,
"C++": 0.6,
"Rust": 0.2,
"Java": 0.9
print(you_know_but_i_dont)
{"Rust", "C++"}
i_know_but_you_dont = i_know.difference(you_know)
print(i_know_but_you_dont)
# Вывод:
{"Python"}
fruits.discard("orange")
fruits.discard("pineapple")
print(fruits)
{"apple", "banana"}
print(numbers)
{1, 3, 5, 7, 9}
non_negative = {0, 1, 2, 3}
print(non_zero)
non_negative = range(4)
non_zero = non_positive.symmetric_difference(non_negative)
print(non_zero)
print(colors)
{"red", "yellow"}