Bài tập Set - Nâng cao
- Viết hàm
count_unique_wordsnhận vào một chuỗi văn bản và đếm số từ duy nhất (không phân biệt hoa thường).
def count_unique_words(text):
# Code của bạn ở đây
pass
# Test
text = "Python is fun and Python is easy"
count = count_unique_words(text)
print(count) # 5 (python, is, fun, and, easy)- Viết hàm
find_missing_numbersnhận vào một set chứa các số từ 1 đến n (nhưng thiếu một số), tìm các số bị thiếu.
def find_missing_numbers(numbers, n):
# Code của bạn ở đây
pass
# Test
numbers = {1, 2, 4, 6, 7, 9, 10}
missing = find_missing_numbers(numbers, 10)
print(missing) # {3, 5, 8}- Viết hàm
all_subsetsnhận vào một set và trả về tất cả các tập con của set đó.
def all_subsets(my_set):
# Code của bạn ở đây
pass
# Test
my_set = {1, 2, 3}
result = all_subsets(my_set)
print(result)
# [set(), {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}]💡 Gợi ý: Dùng itertools.combinations hoặc đệ quy
- Viết hàm
set_operationsnhận vào ba set và trả về dictionary chứa kết quả các phép toán.
def set_operations(set1, set2, set3):
# Code của bạn ở đây
# Trả về dict với keys: "union_all", "intersection_all", "difference"
pass
# Test
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}
result = set_operations(set1, set2, set3)
print(result)
# {
# "union_all": {1, 2, 3, 4, 5},
# "intersection_all": {3},
# "unique_to_set1": {1}
# }- Viết hàm
powersettính lũy thừa tập hợp (tất cả các tập con có thể) của một set.
def powerset(my_set):
# Code của bạn ở đây
pass
# Test
my_set = {1, 2}
result = powerset(my_set)
print(result)
# {frozenset(), frozenset({1}), frozenset({2}), frozenset({1, 2})}- Viết hàm
find_duplicates_in_listsnhận vào nhiều list và trả về set chứa các phần tử xuất hiện ở nhiều hơn một list.
def find_duplicates_in_lists(*lists):
# Code của bạn ở đây
pass
# Test
list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
list3 = [4, 5, 6, 7]
duplicates = find_duplicates_in_lists(list1, list2, list3)
print(duplicates) # {3, 4, 5, 6}- Viết hàm
jaccard_similaritytính độ tương đồng Jaccard giữa hai set.
Công thức: J(A,B) = |A ∩ B| / |A ∪ B|
def jaccard_similarity(set1, set2):
# Code của bạn ở đây
pass
# Test
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
similarity = jaccard_similarity(set1, set2)
print(similarity) # 0.333... (2/6)- Viết hàm
partition_setchia một set thành hai set dựa trên một điều kiện (hàm).
def partition_set(my_set, condition):
# Code của bạn ở đây
pass
# Test
numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
evens, odds = partition_set(numbers, lambda x: x % 2 == 0)
print(evens) # {2, 4, 6, 8, 10}
print(odds) # {1, 3, 5, 7, 9}- Viết hàm
most_common_lettersnhận vào một chuỗi và số n, trả về set chứa n ký tự xuất hiện nhiều nhất.
def most_common_letters(text, n):
# Code của bạn ở đây
pass
# Test
text = "hello world"
result = most_common_letters(text, 3)
print(result) # {'l', 'o', ' '} (hoặc thứ tự khác)- Viết hàm
check_all_uniquenhận vào một list và kiểm tra xem tất cả phần tử có duy nhất không (không có phần tử trùng lặp).
def check_all_unique(my_list):
# Code của bạn ở đây
pass
# Test
list1 = [1, 2, 3, 4, 5]
print(check_all_unique(list1)) # True
list2 = [1, 2, 3, 2, 4]
print(check_all_unique(list2)) # False- Viết hàm
set_cartesian_producttính tích Descartes của hai set (tất cả các cặp có thể).
def set_cartesian_product(set1, set2):
# Code của bạn ở đây
pass
# Test
set1 = {1, 2}
set2 = {'a', 'b'}
result = set_cartesian_product(set1, set2)
print(result)
# {(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')}- Viết chương trình phân tích mối quan hệ giữa 3 lớp học. Cho trước:
class_a = {"Alice", "Bob", "Charlie", "David"}class_b = {"Bob", "David", "Eve", "Frank"}class_c = {"Charlie", "David", "Frank", "George"}
Tìm:
- Học sinh học tất cả 3 lớp
- Học sinh học đúng 2 lớp
- Học sinh chỉ học 1 lớp
- Viết hàm
symmetric_difference_multipletính hiệu đối xứng của nhiều set (phần tử xuất hiện số lẻ lần).
def symmetric_difference_multiple(*sets):
# Code của bạn ở đây
pass
# Test
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}
result = symmetric_difference_multiple(set1, set2, set3)
print(result) # {1, 3, 5}- Viết hàm
filter_setnhận vào một set và một hàm điều kiện, trả về set mới chỉ chứa các phần tử thỏa điều kiện.
def filter_set(my_set, condition):
# Code của bạn ở đây
pass
# Test
numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
result = filter_set(numbers, lambda x: x > 5)
print(result) # {6, 7, 8, 9, 10}- Viết hàm
map_setáp dụng một hàm lên tất cả phần tử của set và trả về set mới.
def map_set(my_set, func):
# Code của bạn ở đây
pass
# Test
numbers = {1, 2, 3, 4, 5}
result = map_set(numbers, lambda x: x ** 2)
print(result) # {1, 4, 9, 16, 25}- Viết hàm
find_unique_in_allnhận vào nhiều set và trả về set chứa các phần tử chỉ xuất hiện trong đúng một set.
def find_unique_in_all(*sets):
# Code của bạn ở đây
pass
# Test
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
set3 = {5, 6, 7, 8}
result = find_unique_in_all(set1, set2, set3)
print(result) # {1, 2, 7, 8}- Viết hàm
is_partitionkiểm tra xem một tập hợp các set có phải là phân hoạch của một set lớn không (không overlap và hợp lại bằng set lớn).
def is_partition(main_set, *subsets):
# Code của bạn ở đây
pass
# Test
main_set = {1, 2, 3, 4, 5, 6}
subset1 = {1, 2}
subset2 = {3, 4}
subset3 = {5, 6}
print(is_partition(main_set, subset1, subset2, subset3)) # True
subset4 = {1, 2, 3}
subset5 = {3, 4, 5, 6}
print(is_partition(main_set, subset4, subset5)) # False (3 overlap)- Viết hàm
create_frozenset_dicttạo dictionary với frozen set làm key.
def create_frozenset_dict(data):
# data là list of tuples: (set, value)
# Trả về dict với frozenset làm key
pass
# Test
data = [
({1, 2}, "pair1"),
({3, 4}, "pair2"),
({5, 6}, "pair3")
]
result = create_frozenset_dict(data)
print(result)
# {frozenset({1, 2}): "pair1", frozenset({3, 4}): "pair2", ...}- Viết hàm
sliding_window_uniquenhận vào một list và kích thước cửa sổ k, trả về list các set (mỗi set chứa các phần tử duy nhất trong cửa sổ).
def sliding_window_unique(my_list, k):
# Code của bạn ở đây
pass
# Test
numbers = [1, 2, 3, 2, 4, 5, 4, 6]
result = sliding_window_unique(numbers, 3)
print(result)
# [{1, 2, 3}, {2, 3}, {2, 3, 4}, {2, 4, 5}, {4, 5}, {4, 5, 6}]- Viết hàm
build_graph_from_setsnhận vào nhiều set và xây dựng đồ thị (graph) biểu diễn mối quan hệ giữa chúng (hai set có cạnh nối nếu có phần tử chung).
def build_graph_from_sets(*sets):
# Trả về dict biểu diễn graph
# Key: index của set, Value: list các index của set có phần tử chung
pass
# Test
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {5, 6, 7}
set4 = {4, 5, 6}
graph = build_graph_from_sets(set1, set2, set3, set4)
print(graph)
# {
# 0: [1], # set1 connected to set2
# 1: [0, 3], # set2 connected to set1, set4
# 2: [3], # set3 connected to set4
# 3: [1, 2] # set4 connected to set2, set3
# }- Viết hàm
bloom_filter_checkmô phỏng đơn giản Bloom Filter sử dụng set (kiểm tra membership hiệu quả).
class SimpleBloomFilter:
def __init__(self):
self.data = set()
def add(self, item):
# Thêm item vào filter
pass
def contains(self, item):
# Kiểm tra item có trong filter không
pass
# Test
bloom = SimpleBloomFilter()
bloom.add("hello")
bloom.add("world")
print(bloom.contains("hello")) # True
print(bloom.contains("python")) # False- Viết hàm
set_cover_greedygiải bài toán Set Cover đơn giản bằng thuật toán tham lam (tìm số set nhỏ nhất để phủ tất cả phần tử).
def set_cover_greedy(universe, sets):
# universe: set chứa tất cả phần tử cần phủ
# sets: list các set có sẵn
# Trả về list các index của set được chọn
pass
# Test
universe = {1, 2, 3, 4, 5}
sets = [
{1, 2},
{2, 3, 4},
{4, 5},
{1, 5}
]
result = set_cover_greedy(universe, sets)
print(result) # [1, 3] hoặc [1, 2] (có thể có nhiều đáp án)- Viết hàm
hamming_distance_setstính khoảng cách Hamming giữa hai set (số phần tử khác nhau).
def hamming_distance_sets(set1, set2):
# Code của bạn ở đây
pass
# Test
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
distance = hamming_distance_sets(set1, set2)
print(distance) # 4 ({1, 2} khác + {5, 6} khác)- Viết hàm
optimize_storagenhận vào một list các chuỗi và trả về set các từ duy nhất, giúp tiết kiệm bộ nhớ.
def optimize_storage(strings):
# Phân tích và trả về thống kê
pass
# Test
strings = ["hello world", "world peace", "hello python", "python world"]
words, stats = optimize_storage(strings)
print(words) # {'hello', 'world', 'peace', 'python'}
print(stats) # {'total_words': 8, 'unique_words': 4, 'saved_percentage': 50}- Viết hàm
find_cliquestìm tất cả các nhóm set có phần tử chung với nhau (cliques).
def find_cliques(*sets):
# Trả về list các cliques (mỗi clique là list các index)
pass
# Test
set1 = {1, 2}
set2 = {2, 3}
set3 = {3, 4}
set4 = {5, 6}
cliques = find_cliques(set1, set2, set3, set4)
print(cliques) # [[0, 1, 2], [3]]