Python. Множества
Множество - структура данных, которая может содержать уникальные неупорядоченные элементы разного типа.
Множество в программе можно идентифицировать, перечислив элементы множества в фигурных скобках.
Например,
color_set = {"red", "yellow", "green"}
print(color_set)
Если запустить программу несколько раз, то можем получить следующий вывод:
{"red", "yellow", "green"}
{"yellow", "red", "green"}
{"red", "green", "yellow"}
или другие варианты из трех элементов. Набор элементов всегда одинаковый, но порядок вывода может изменяться. Варианты вывода подтверждают, что множество неупорядоченная коллекция данных.
Множества
- множества не содержат одинаковых элементов;
- порядок элементов множества не определен;
- множества позволяют добавлять и удалять элементы;
- элементы множества могут быть разного типа;
- возможность перебора элементов множества;
- возможность проверки наличия элемента во множестве;
- применять операции пересечения, объединения, разности и симметричной разности множеств.
В программе пустое множество может быть объявлено как set():
fruits = set() # пустое множество fruits
fruits = {"apple", "orange", "lemon", "banana"} # непустое множество из 4-х элементов
print(fruits) # вывод множества {"apple", "orange", "lemon", "banana"}
Интересно! Если вы используете вывод одного и того же набора несколько раз в одной и той же программе, то порядок во всех выводах будет одинаковым.
Когда на экран выводится пустое множество, то при выводе появится: set ()
fruits = set() # пустое множество fruits
print(fruits) # set()
Множества могут содержать элементы разного типа.
# множество fruits_and_price содержат строки и целые числа
fruits_and_price = {"apple", 300, "orange", 700, "lemon", 900, "banana", 550}
Множество содержит только уникальные элементы, т.е. элементы не повторяются в наборе.
Например, если написать повторяющиеся элементы во множестве, множество будет хранить только один элемент.
# множество fruits содержит два элемента "orange"
fruits = {"apple", "orange", "lemon", "orange", "banana"}
# выводится только 4 элемента
print(fruits) # {"apple", "orange", "lemon", "banana"}
Функции множества len(), sum(), min(), max()
numbers = {5, 3, 7, 4}
print(len(numbers)) # количество элементов множества fruits = 4
print(sum(numbers)) # сумма элементов множества (только для чисел) = 19
print(min(numbers)) # минимальное значение множества = 3
print(max(numbers)) # максимальное значение множества = 7
Операции множеств
1. Определение количества элементов во множестве
len(переменная множества)
fruits = {"apple", "orange", "lemon", "banana"}
print(len(fruits)) # количество элементов множества = 4
fruits_and_price = {"apple", 300, "orange", 700, "lemon", 900, "banana", 550}
print(len(fruits_and_price)) # количество элементов множества = 8
2. Перебор элементов множества
for item in my_set:
fruits = {"apple", "orange", "lemon", "banana"}
for item in fruits: # перебор элементов множества
print(item) # вывод элемента множества, порядок может каждый раз отличаться
3. Поиск элемента во множестве
if item in my_set:
if item in my_set: # проверка есть ли элемемент item во множестве
print('Элемент находится во множестве')
else:
print('Элемента нет во множестве')
4. Добавление элемента во множество
my_set.add(item) # add() - метод добавления элемента
fruits = {"apple", "orange", "lemon", "banana"}
fruit = "melon"
fruits.add(fruit) # добавить новый элемент во множество
print(len(fruits)) # количество элементов множества = 5
Если мы добавим элемент, который уже есть, то набор элементов множества не изменится.
my_set = set() # инициализация пустого множества
my_set.add(1) # добавление первого элемента во множество
my_set.add(5) # добавление второго элемента во множество
my_set.add(1) # добавление третьего элемента во множество
print(my_set) # вывод {1, 5}
5. Удаление элемента
Для удаления элемента из набора используются три различных метода:
discard - удаляет заданный элемент, если он есть в наборе, и ничего не делает, если его нет;
my_set = {'one', 'two', 'three'}
my_set.discard('two') # element 'two' removed from set my_set
my_set.discard('four') # item not deleted, no error
print(my_set) # will print the remaining elements of the set {'one', 'three'}
remove - удаляет заданный элемент, если он есть в наборе, или выдает KeyError если нет;
my_set = {'one', 'two', 'three'}
my_set.remove('two') # element 'two' removed from my_set
print(my_set) # will print the remaining elements of the set {'one', 'three'}
my_set.remove('four') # cannot be removed, KeyError
Метод удаления позволит вам проверить наличие ошибки в программе. Если вы уверены, что элемент должен быть в наборе, лучше получить ошибку при отладке и сразу ее исправить, чем тратить время на поиски, если программа работает некорректно.
pop - удаляет некоторый элемент из множества и возвращает его в качестве результата. В этом случае порядок удаления неизвестен.
my_set = {'one', 'two', 'three'}
print('before deletion:', my_set)
item = my_set.pop()
print('deleted item:', item)
print('after deletion:', my_set)
6. Удаление всех элементов множества
my_set.clear ()
my_set = {'one', 'two', 'three'}
my_set.clear()
print(my_set) # вывод set()
Логические операции двух множеств
Новый набор можно получить из двух множеств, используя следующие операции:
Операция |
Пример использования |
Intersection/Пересечение
|
set1 = {5, 8, 4, 6}
set2 = {1, 2, 8, 5}
new_set = set1 & set2
print(new_set)
new_set = set1.intersection(set2)
print(new_set) Вывод: {5, 8}
|
Union/Объединение
|
set1 = {5, 8, 4, 6}
set2 = {1, 2, 8, 5}
new_set = set1 | set2
print(new_set)
new_set = set1.union(set2)
print(new_set) Вывод: {1, 2, 4, 5, 6, 8}
|
Difference/Разность
|
set1 = {5, 8, 4, 6}
set2 = {1, 2, 8, 5}
new_set = set1 - set2
print(new_set)
new_set = set1.difference(set2)
print(new_set) Вывод: {4, 6}
|
Symmetric Difference/
Симметричная разность
|
set1 = {5, 8, 4, 6}
set2 = {1, 2, 8, 5}
new_set = set1 ^ set2
print(new_set)
new_set = set1.symmetric_difference(set2)
print(new_set)
Вывод: {1, 2, 4, 6}
|
Сравнение множеств
print({1, 2, 3, 4} == {4, 3, 1, 2}) # True
print({1, 3, 2, 4} != {4, 3, 1, 2}) # False
print({"one", "two", "three"} >= {"one", "three"}) # True
print({2, 4} < {1, 3, 4}) # False
print({"one", "more", "time"} < {"time", "one", "more"}) # False
Подмножество и надмножество
s1 = {'a', 'b', 'c'}
print(s1 <= s1) # True
s2 = {'a', 'b'}
print(s2 <= s1) # True
s3 = {'a'}
print(s3 <= s1) # True
s4 = {'a', 'z'}
print(s4 <= s1) # False
Операция s1 < s2 значит "s1 подмножество множество s2, но не совпадает с ним", то есть все элементы множества s1 содержатся в s2.
Операция s1 > s2 значит "s1 надмножество множества s2, но не совпадает с ним", то есть все элементы множества s1 содержат элементы множества s2.
Вопросы:
- Что такое множество в программировании на Python?
- Опишите особенности множества.
Упражнения:
Упр. 1 "Определите результаты"
Упр. 2 "Сравните множества"
Упр. 3 "Операции множеств"
Упр. 4 "Результаты выполнения операций множеств"
|