Python · Синтаксис · Початковий рівень
Методи множин
Навчіться працювати з множинами: додавати та видаляти елементи, а також виконувати операції об'єднання, перетину та різниці.
Короткий вступ до теми та пояснення перед вправами (вправи нижче):
Практичні задачі з множинами
#Довідник: методи множин
#Вправи:
Безпечне видалення
#Напишіть функцію `safe_remove(s, value)`, яка видаляє `value` з множини `s` якщо він є, і повертає `True` якщо видалено або `False` якщо не знайдено. Функція ніколи не повинна кидати помилку. Приклад: `s = {1, 2, 3}; safe_remove(s, 2)` → `True`, `s == {1, 3}`; `safe_remove(s, 99)` → `False`.
def safe_remove(s, value):
pass
s = {1, 2, 3}
print(safe_remove(s, 2)) # True (s тепер {1, 3})
print(safe_remove(s, 99)) # False
Рішення
def safe_remove(s, value):
if value in s:
s.discard(value)
return True
return False
s = {1, 2, 3}
print(safe_remove(s, 2)) # True
print(safe_remove(s, 99)) # False
Видалити дублікати зі збереженням порядку
#Напишіть функцію `unique_ordered(lst)`, яка видаляє дублікати зі списку зі збереженням порядку першої появи. Приклад: `unique_ordered([3, 1, 4, 1, 5, 9, 2, 6, 5, 3])` → `[3, 1, 4, 5, 9, 2, 6]`. Використовуйте множину для відстеження побачених елементів.
def unique_ordered(lst):
pass
print(unique_ordered([3, 1, 4, 1, 5, 9, 2, 6, 5, 3]))
# [3, 1, 4, 5, 9, 2, 6]
Рішення
def unique_ordered(lst):
seen = set()
result = []
for item in lst:
if item not in seen:
seen.add(item)
result.append(item)
return result
print(unique_ordered([3, 1, 4, 1, 5, 9, 2, 6, 5, 3]))
# [3, 1, 4, 5, 9, 2, 6]
Спільні елементи
#Напишіть функцію `common(a, b)`, яка повертає множину елементів, що є у обох списках `a` і `b`. Приклад: `common([1, 2, 3, 4], [3, 4, 5, 6])` → `{3, 4}`. Перетворіть на множини і використайте операцію перетину.
def common(a, b):
pass
print(common([1, 2, 3, 4], [3, 4, 5, 6]))
# {3, 4}
Рішення
def common(a, b):
return set(a) & set(b)
print(common([1, 2, 3, 4], [3, 4, 5, 6]))
# {3, 4}
Тільки в одному
#Напишіть функцію `exclusive(a, b)`, яка повертає множину елементів, що є рівно в одному з двох списків (але не в обох). Приклад: `exclusive([1, 2, 3], [2, 3, 4])` → `{1, 4}`. Використайте операцію симетричної різниці.
def exclusive(a, b):
pass
print(exclusive([1, 2, 3], [2, 3, 4]))
# {1, 4}
Рішення
def exclusive(a, b):
return set(a) ^ set(b)
print(exclusive([1, 2, 3], [2, 3, 4]))
# {1, 4}
Перевірка підмножини
#Напишіть функцію `is_subset(small, big)`, яка повертає `True`, якщо кожен елемент `small` також є у `big`. Обидва аргументи можуть бути списками або множинами. Приклад: `is_subset([1, 2], [1, 2, 3, 4])` → `True`, `is_subset([1, 5], [1, 2, 3])` → `False`.
def is_subset(small, big):
pass
print(is_subset([1, 2], [1, 2, 3, 4])) # True
print(is_subset([1, 5], [1, 2, 3])) # False
Рішення
def is_subset(small, big):
return set(small) <= set(big)
print(is_subset([1, 2], [1, 2, 3, 4])) # True
print(is_subset([1, 5], [1, 2, 3])) # False
Кількість унікальних слів
#Напишіть функцію `unique_word_count(text)`, яка повертає кількість унікальних слів у рядку (без урахування регістру). Приклад: `unique_word_count("The cat sat on the mat the cat")` → `5` (the, cat, sat, on, mat).
def unique_word_count(text):
pass
print(unique_word_count("The cat sat on the mat the cat"))
# 5 (the, cat, sat, on, mat)
Рішення
def unique_word_count(text):
return len(set(text.lower().split()))
print(unique_word_count("The cat sat on the mat the cat"))
# 5 (the, cat, sat, on, mat)
Допустимі символи
#Напишіть функцію `has_only_valid(s, allowed)`, яка повертає `True`, якщо кожен символ рядка `s` міститься у рядку `allowed`. Приклад: `has_only_valid("hello", "aehllo")` → `True`, `has_only_valid("hello!", "aehllo")` → `False`. Використайте операції над множинами.
def has_only_valid(s, allowed):
pass
print(has_only_valid("hello", "aehllo")) # True
print(has_only_valid("hello!", "aehllo")) # False
Рішення
def has_only_valid(s, allowed):
return set(s) <= set(allowed)
print(has_only_valid("hello", "aehllo")) # True
print(has_only_valid("hello!", "aehllo")) # False
Set Comprehension
#Напишіть функцію `vowel_set(text)`, яка повертає множину всіх унікальних голосних (a, e, i, o, u), що зустрічаються у `text` (без урахування регістру). Використайте set comprehension. Приклад: `vowel_set("Hello World")` → `{"e", "o"}`.
def vowel_set(text):
pass
print(vowel_set("Hello World")) # {"e", "o"}
print(vowel_set("Python")) # {"o"}
Рішення
def vowel_set(text):
vowels = "aeiou"
return {ch for ch in text.lower() if ch in vowels}
print(vowel_set("Hello World")) # {"e", "o"}
print(vowel_set("Python")) # {"o"}
Діаграма Вена
#Студенти можуть записатись у Клуб A, Клуб B або обидва. З двох множин `club_a` і `club_b` з іменами студентів напишіть функцію `venn(club_a, club_b)`, яка повертає словник з трьома ключами: `"only_a"` (тільки в A), `"only_b"` (тільки в B), `"both"` (в обох). Приклад: `venn({"Alice", "Bob", "Carol"}, {"Bob", "Carol", "David"})` → `{"only_a": {"Alice"}, "only_b": {"David"}, "both": {"Bob", "Carol"}}`.
def venn(club_a, club_b):
pass
result = venn({"Alice", "Bob", "Carol"}, {"Bob", "Carol", "David"})
print(result["only_a"]) # {"Alice"}
print(result["only_b"]) # {"David"}
print(result["both"]) # {"Bob", "Carol"}
Рішення
def venn(club_a, club_b):
return {
"only_a": club_a - club_b,
"only_b": club_b - club_a,
"both": club_a & club_b,
}
result = venn({"Alice", "Bob", "Carol"}, {"Bob", "Carol", "David"})
print(result["only_a"]) # {"Alice"}
print(result["only_b"]) # {"David"}
print(result["both"]) # {"Bob", "Carol"}
Спільне для всіх множин
#Напишіть функцію `common_all(*lists)`, яка повертає множину елементів, що є у ВСІХ переданих списках. Приклад: `common_all([1, 2, 3], [2, 3, 4], [2, 3, 5])` → `{2, 3}`. Обробіть випадок коли списків не передано (повернути порожню множину).
def common_all(*lists):
pass
print(common_all([1, 2, 3], [2, 3, 4], [2, 3, 5])) # {2, 3}
print(common_all([1, 2], [3, 4])) # set()
print(common_all()) # set()
Рішення
def common_all(*lists):
if not lists:
return set()
result = set(lists[0])
for lst in lists[1:]:
result &= set(lst)
return result
print(common_all([1, 2, 3], [2, 3, 4], [2, 3, 5])) # {2, 3}
print(common_all([1, 2], [3, 4])) # set()
print(common_all()) # set()