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
# Testtext = "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
# Testnumbers = {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
# Testmy_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", "unique_to_set1" pass
# Testset1 = {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
# Testmy_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
# Testlist1 = [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
# Testset1 = {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
# Testnumbers = {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
# Testtext = "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
# Testlist1 = [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
# Testset1 = {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
# Testset1 = {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
# Testnumbers = {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
# Testnumbers = {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
# Testset1 = {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
# Testmain_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
# Testdata = [ ({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
# Testnumbers = [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
# Testset1 = {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
# Testbloom = SimpleBloomFilter()bloom.add("hello")bloom.add("world")print(bloom.contains("hello")) # Trueprint(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
# Testuniverse = {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] (sets[1] ∪ sets[3] = {1,2,3,4,5})- 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
# Testset1 = {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
# Teststrings = ["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
# Testset1 = {1, 2}set2 = {2, 3}set3 = {3, 4}set4 = {5, 6}
cliques = find_cliques(set1, set2, set3, set4)print(cliques) # [[0, 1, 2], [3]]