🎯 Sets - Cấu Trúc Dữ Liệu Loại Bỏ Trùng Lặp
🎯 Ví Dụ Dễ Hiểu
Hãy tưởng tượng Set như một túi ma thuật! Khi bạn bỏ đồ vào, nó tự động loại bỏ những thứ trùng lặp. Bạn có 3 quả táo, 2 quả cam, 3 quả táo nữa → trong túi chỉ còn 1 quả táo và 1 quả cam!
🤔 Set Là Gì?
Set là cấu trúc dữ liệu chứa các phần tử duy nhất (unique) và không có thứ tự. Set rất hữu ích để:
- 🎯 Loại bỏ trùng lặp
- 🔍 Tìm kiếm nhanh
- 🧮 Thực hiện phép toán tập hợp
🆚 So Sánh Với Các Cấu Trúc Khác
# List - có thể trùng lặp, có thứ tự
number_list = [1, 2, 3, 2, 1, 3]
print("List:", number_list) # [1, 2, 3, 2, 1, 3]
# Set - không trùng lặp, không thứ tự
number_set = {1, 2, 3, 2, 1, 3}
print("Set:", number_set) # {1, 2, 3} hoặc {2, 1, 3} (thứ tự ngẫu nhiên)
# Tuple - có thể trùng lặp, có thứ tự, không thay đổi
fixed_tuple = (1, 2, 3, 2, 1)
print("Tuple:", fixed_tuple) # (1, 2, 3, 2, 1)
🎯 Tạo Set
📌 Cách Tạo Cơ Bản
# Cách 1: Dùng dấu ngoặc nhọn
set_1 = {1, 2, 3, 4, 5}
set_2 = {"An", "Bình", "Châu"}
# Cách 2: Dùng set()
set_3 = set([1, 2, 3, 4, 5])
set_4 = set("Python") # {'P', 'y', 't', 'h', 'o', 'n'}
# Set rỗng (phải dùng set(), không dùng {})
empty_set = set()
# Từ string - loại bỏ ký tự trùng lặp
text = "hello world"
unique_chars = set(text)
print("Ký tự unique:", unique_chars) # {'h', 'e', 'l', 'o', ' ', 'w', 'r', 'd'}
# Từ list - loại bỏ phần tử trùng lặp
number_list = [1, 2, 3, 2, 1, 4, 3, 5]
unique_numbers = set(number_list)
print("Số unique:", unique_numbers) # {1, 2, 3, 4, 5}
🎨 Các Kiểu Dữ Liệu Trong Set
# Set hỗn hợp
mixed_set = {1, "Python", 3.14, True, (1, 2, 3)}
# Set không thể chứa list hoặc dict (vì chúng mutable)
# invalid_set = {1, [2, 3]} # ❌ Lỗi!
# Set có thể chứa tuple (vì tuple immutable)
valid_set = {1, (2, 3), "Python"}
print("Set hỗn hợp:", mixed_set)
print("Set với tuple:", valid_set)
🔍 Truy Cập và Thao Tác
➕ Thêm và Xóa Phần Tử
# Tạo set
hobbies = {"đọc sách", "nghe nhạc"}
# Thêm phần tử
hobbies.add("xem phim")
hobbies.add("chơi game")
print("Sau khi thêm:", hobbies)
# Thêm nhiều phần tử
hobbies.update(["du lịch", "nấu ăn", "vẽ tranh"])
print("Sau khi update:", hobbies)
# Xóa phần tử
hobbies.remove("nghe nhạc") # Xóa, nếu không có sẽ lỗi
hobbies.discard("không có") # Xóa, nếu không có không lỗi
print("Sau khi xóa:", hobbies)
# Xóa ngẫu nhiên
random_element = hobbies.pop()
print(f"Phần tử ngẫu nhiên: {random_element}")
print("Set còn lại:", hobbies)
# Xóa tất cả
hobbies.clear()
print("Set sau khi clear:", hobbies)
🔍 Kiểm Tra và Tìm Kiếm
# Tạo set
subjects = {"Toán", "Lý", "Hóa", "Văn", "Anh"}
# Kiểm tra có tồn tại
print("Có môn Toán?", "Toán" in subjects) # True
print("Có môn Sử?", "Sử" in subjects) # False
# Độ dài
print("Số môn học:", len(subjects)) # 5
# Kiểm tra set con
science_subjects = {"Toán", "Lý", "Hóa"}
social_subjects = {"Văn", "Sử", "Địa"}
print("Môn khoa học có trong danh sách?", science_subjects.issubset(subjects)) # True
print("Môn xã hội có trong danh sách?", social_subjects.issubset(subjects)) # False