Множества Python
Python оснащен несколькими встроенными типами данных, которые помогают нам организовывать наши данные. Эти структуры включают списки (lists), словари (dictionaries), кортежи (tuples) и множества (sets).
Множество — это неупорядоченная коллекция без повторяющихся элементов. Основные варианты использования включают проверку членства и устранение дублирующихся записей.
Прочтите Python Sets: What, Why and How для более глубокого справочного материала.
Инициализация множества
Существует два способа создания множеств: с использованием фигурных скобок {} и встроенной функции set().
Пустые множества
При создании множества убедитесь, что вы не используете пустые фигурные скобки {}, иначе вместо множества вы получите пустой словарь.
# Create set using curly braces or set() function
s = {1, 2, 3} # Using curly braces
s = set([1, 2, 3]) # Using set() constructor
# Warning: empty {} creates a dictionary, not a set
s = {} # this will create a dictionary instead of a set
type(s) # Returns <class 'dict'>
<class 'dict'>
Неупорядоченные коллекции уникальных элементов
Множество автоматически удаляет все повторяющиеся значения.
# Sets automatically remove duplicates
s = {1, 2, 3, 2, 3, 4} # Duplicates are removed
s # Returns {1, 2, 3, 4}
{1, 2, 3, 4}
Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения
И как неупорядоченный тип данных, они не могут быть проиндексированы.
s = {1, 2, 3}
s[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
Добавление и обновление множества (set add and update)
Используя метод add(), мы можем добавить один элемент в множество.
# add() method: add a single element to the set
s = {1, 2, 3}
s.add(4) # Add element 4
s
{1, 2, 3, 4}
А с помощью update() можно добавить несколько элементов:
# update() method: add multiple elements from an iterable
s = {1, 2, 3}
s.update([2, 3, 4, 5, 6]) # Add multiple elements (duplicates ignored)
s
{1, 2, 3, 4, 5, 6}
Удаление элемента из множества (set remove and discard)
Оба метода удалят элемент из множества, но remove() вызовет ошибку key error, если значение не существует.
# remove() method: remove element, raises KeyError if not found
s = {1, 2, 3}
s.remove(3) # Remove element 3
s
{1, 2}
s.remove(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 3
discard() не вызовет никаких ошибок.
# discard() method: remove element, no error if not found
s = {1, 2, 3}
s.discard(3) # Remove element 3 (safe, no error if missing)
s
{1, 2}
s.discard(3)
Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения
remove() and discard() methods for sets?remove() removes one element, discard() removes allremove() raises an error if element doesn't exist, discard() does notremove() is fasterОбъединение множеств (set union)
union() или | создаст новое множество со всеми элементами из предоставленных множеств.
# union(): combine all elements from multiple sets (no duplicates)
s1 = {1, 2, 3}
s2 = {3, 4, 5}
s1.union(s2) # or 's1 | s2' - returns {1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
Пересечение множеств (set intersection)
intersection() или & вернет множество, содержащее только те элементы, которые являются общими для всех множеств.
# intersection(): return elements common to all sets
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = {3, 4, 5}
s1.intersection(s2, s3) # or 's1 & s2 & s3' - returns {3}
{3}
Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения
intersection() return for sets?Разность множеств (set difference)
difference() или - вернет только те элементы, которые уникальны для первого множества (множества, к которому применяется метод).
# difference(): return elements in first set but not in others
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1.difference(s2) # or 's1 - s2' - returns {1}
{1}
s2.difference(s1) # or 's2 - s1'
{4}
Симметричная разность множеств (set symmetric_difference)
symmetric_difference() или ^ вернет все элементы, которые не являются общими для множеств.
# symmetric_difference(): return elements in either set, but not both
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1.symmetric_difference(s2) # or 's1 ^ s2' - returns {1, 4}
{1, 4}
Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения
symmetric_difference() return for two sets?