Введение
Добро пожаловать в эту лабораторную работу по множествам (Sets) в Python! Python предоставляет несколько встроенных типов данных для организации информации, включая списки (lists), словари (dictionaries), кортежи (tuples) и множества (sets).
Согласно официальной документации Python, множество — это неупорядоченная коллекция без повторяющихся элементов. Его основное применение — проверка принадлежности (membership testing) и удаление дубликатов.
В этой лабораторной работе вы изучите, как создавать множества, манипулировать ими и эффективно использовать их с помощью серии практических упражнений.
Инициализация множества
На этом шаге вы узнаете два основных способа создания множеств (sets) в Python: с использованием фигурных скобок {} и встроенной функции set(). Важно понимать, что использование пустых фигурных скобок {} создает пустой словарь (dictionary), а не пустое множество.
Примечание: Если вы не знакомы с использованием WebIDE (похожего на VS Code), пожалуйста, изучите это в этой лаборатории.
Сначала откройте файл step1.py в проводнике файлов слева.
Теперь скопируйте и вставьте следующий код в step1.py. Этот код демонстрирует, как создавать множества, и выделяет особый случай создания пустого множества.
## Create set using curly braces or set() function
s_braces = {1, 2, 3}
print(f"Set with braces: {s_braces}, type: {type(s_braces)}")
s_func = set([1, 2, 3])
print(f"Set with function: {s_func}, type: {type(s_func)}")
## Warning: empty {} creates a dictionary, not a set
s_dict = {}
print(f"Empty braces create a: {type(s_dict)}")
## To create an empty set, you must use set()
s_empty = set()
print(f"To create an empty set use set(): {type(s_empty)}")
Сохраните файл, а затем запустите его из терминала, выполнив следующую команду:
python3 step1.py
Вы должны увидеть следующий вывод, который подтверждает типы созданных объектов. Обратите внимание, что {} приводит к <class 'dict'>.
Set with braces: {1, 2, 3}, type: <class 'set'>
Set with function: {1, 2, 3}, type: <class 'set'>
Empty braces create a: <class 'dict'>
To create an empty set use set(): <class 'set'>
Понимание свойств множеств
На этом шаге вы изучите основные свойства множеств (sets). Множества мощны тем, что они автоматически обеспечивают уникальность элементов и являются неупорядоченными. Это означает, что множество автоматически удалит любые повторяющиеся значения, и вы не сможете получить доступ к его элементам по индексу.
Откройте файл step2.py.
Скопируйте и вставьте следующий код в step2.py. Первая часть кода демонстрирует, как обрабатываются дубликаты, а вторая часть показывает, что происходит при попытке индексации множества.
## Sets automatically remove duplicates
s_duplicates = {1, 2, 3, 2, 3, 4}
print(f"Original with duplicates: {{1, 2, 3, 2, 3, 4}}")
print(f"Set with duplicates removed: {s_duplicates}")
## Sets are unordered and cannot be indexed
print("\nAttempting to access a set by index...")
try:
s = {1, 2, 3}
s[0]
except TypeError as e:
print(f"Error when indexing: {e}")
Теперь запустите скрипт из терминала:
python3 step2.py
Вывод будет следующим:
Original with duplicates: {1, 2, 3, 2, 3, 4}
Set with duplicates removed: {1, 2, 3, 4}
Attempting to access a set by index...
Error when indexing: 'set' object is not subscriptable
Как видите, дубликаты 2 и 3 были автоматически удалены. Попытка доступа к s[0] привела к TypeError, что подтверждает, что множества не поддерживают индексацию.
Добавление и обновление элементов
На этом шаге вы узнаете, как добавлять новые элементы в существующее множество. Python предоставляет для этого два основных метода: add() для добавления одного элемента и update() для добавления нескольких элементов из итерируемого объекта (iterable), такого как список или другое множество.
Откройте файл step3.py.
Скопируйте и вставьте следующий код в step3.py. Этот код сначала создаст множество, затем добавит один элемент, и, наконец, обновит его несколькими элементами.
## Start with a set
s = {1, 2, 3}
print(f"Original set: {s}")
## add() method: add a single element
s.add(4)
print(f"After adding 4: {s}")
## update() method: add multiple elements from an iterable
s.update([2, 3, 4, 5, 6]) ## Duplicates like 2, 3, 4 are ignored
print(f"After updating with [2, 3, 4, 5, 6]: {s}")
Выполните скрипт из терминала:
python3 step3.py
Ваш вывод должен выглядеть следующим образом. Обратите внимание, что при использовании update() любые элементы, которые уже присутствуют в множестве, просто игнорируются.
Original set: {1, 2, 3}
After adding 4: {1, 2, 3, 4}
After updating with [2, 3, 4, 5, 6]: {1, 2, 3, 4, 5, 6}
Удаление и отбрасывание элементов
На этом шаге вы узнаете о двух способах удаления элементов из множества: remove() и discard(). Хотя оба метода удаляют элемент, они ведут себя по-разному, если элемент не найден. Метод remove() вызовет исключение KeyError, которое может привести к сбою вашей программы, если его не обработать, тогда как discard() ничего не сделает и продолжит работу без ошибок.
Откройте файл step4.py.
Скопируйте и вставьте следующий код, который демонстрирует поведение обоих методов.
## remove() method: raises KeyError if element is not found
s = {1, 2, 3}
print(f"Original set: {s}")
s.remove(3)
print(f"After removing 3: {s}")
## Trying to remove an element that doesn't exist with remove()
try:
s.remove(3)
except KeyError as e:
print(f"Error when removing 3 again: KeyError: {e}")
## discard() method: does not raise an error if element is not found
s = {1, 2, 3}
print(f"\nNew original set: {s}")
s.discard(3)
print(f"After discarding 3: {s}")
s.discard(3) ## No error is raised
print(f"After discarding 3 again (no error): {s}")
Запустите скрипт из терминала:
python3 step4.py
Вывод наглядно демонстрирует разницу:
Original set: {1, 2, 3}
After removing 3: {1, 2}
Error when removing 3 again: KeyError: 3
New original set: {1, 2, 3}
After discarding 3: {1, 2}
After discarding 3 again (no error): {1, 2}
Выбор между remove() и discard() зависит от того, хотите ли вы, чтобы ваша программа явно завершалась с ошибкой при отсутствии элемента, или чтобы она корректно обрабатывала его отсутствие.
Операции с множествами
На этом заключительном шаге вы попрактикуетесь в выполнении наиболее распространенных операций над множествами. Эти операции позволяют мощно комбинировать и сравнивать множества. Вы будете использовать как синтаксис методов (например, s1.union(s2)), так и синтаксис операторов (например, s1 | s2).
- Объединение (Union) (
union()или|): Создает новое множество со всеми элементами из предоставленных множеств. - Пересечение (Intersection) (
intersection()или&): Возвращает новое множество, содержащее только те элементы, которые общие для всех множеств. - Разность (Difference) (
difference()или-): Возвращает новое множество с элементами, которые есть в первом множестве, но отсутствуют во втором. - Симметричная разность (Symmetric Difference) (
symmetric_difference()или^): Возвращает новое множество с элементами, которые есть либо в одном, либо в другом множестве, но не в обоих одновременно.
Откройте файл step5.py.
Скопируйте и вставьте следующий код для выполнения этих четырех операций над двумя тестовыми множествами.
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print(f"s1 = {s1}")
print(f"s2 = {s2}\n")
## union() or |
## Returns a new set containing all items from both sets.
print(f"Union (s1 | s2): {s1.union(s2)}")
## intersection() or &
## Returns a new set containing items common to both sets.
s3 = {3, 4, 5}
print(f"Intersection (s1 & s2): {s1.intersection(s2)}")
## difference() or -
## Returns a new set containing items in the first set but not in the second.
print(f"Difference (s1 - s2): {s1.difference(s2)}")
print(f"Difference (s2 - s1): {s2.difference(s1)}")
## symmetric_difference() or ^
## Returns a new set with elements in either set, but not both.
print(f"Symmetric Difference (s1 ^ s2): {s1.symmetric_difference(s2)}")
Запустите скрипт из терминала:
python3 step5.py
Изучите вывод, чтобы понять результат каждой операции:
s1 = {1, 2, 3}
s2 = {2, 3, 4}
Union (s1 | s2): {1, 2, 3, 4}
Intersection (s1 & s2): {2, 3}
Difference (s1 - s2): {1}
Difference (s2 - s1): {4}
Symmetric Difference (s1 ^ s2): {1, 4}
Резюме
В этой лабораторной работе вы изучили основы множеств (sets) в Python. Вы начали с инициализации множеств с использованием фигурных скобок {} и функции set(), отметив важное различие при создании пустых множеств. Вы изучили основные свойства множеств: они неупорядочены и хранят только уникальные элементы. Вы практиковались в изменении множеств, добавляя элементы с помощью методов add() и update(), и удаляя их с помощью методов remove() и discard(), поняв ключевое различие между ними. Наконец, вы выполнили основные операции над множествами, включая объединение (|), пересечение (&), разность (-) и симметричную разность (^). Теперь у вас есть прочная основа для использования множеств для работы с коллекциями уникальных элементов в ваших программах на Python.



