Bài 8 - Sets (Tập Hợp) trong Python
I. Giới thiệu về Sets
Set là một kiểu dữ liệu trong Python dùng để lưu trữ tập hợp các phần tử duy nhất, không có thứ tự.
Đặc điểm chính:
- ✅ Không chứa phần tử trùng lặp
- ✅ Không có thứ tự (không truy cập bằng chỉ số)
- ✅ Có thể thay đổi (mutable) nhưng phần tử phải bất biến (immutable)
- ✅ Hỗ trợ các phép toán tập hợp (hợp, giao, hiệu,...)
II. Cách tạo Set
1. Tạo set cơ bản
# Cách 1: Dùng cặp dấu ngoặc kép {}
fruits = {'apple', 'banana', 'orange'}
# Cách 2: Dùng hàm set()
numbers = set([1, 2, 3, 4])
# Set rỗng
empty_set = set() # ⚠️ Không dùng {} vì sẽ tạo dictionary
# Trường hợp khởi tạo set mà có phần tử trùng lặp thì phần tử trùng lặp sẽ bị loại bỏ tự động.
fruits = {"apple", "banana", "orange", "apple"} # Tự động loại bỏ trùng lặp, vì set không chứa phần tử trung lặp.
print(fruits) # Output: {"apple", "banana", "orange"}
2. Từ các kiểu dữ liệu khác
# Từ list (tự động loại bỏ phần tử trùng)
lst = [1, 2, 2, 3, 4]
unique_numbers = set(lst) # {1, 2, 3, 4}
# Từ chuỗi
chars = set("hello") # {'h', 'e', 'l', 'o'}
III. Các thao tác với Set
1. Thêm/xóa phần tử
colors = {'red', 'blue'}
# Thêm 1 phần tử
colors.add('green') # {'red', 'blue', 'green'}
# Thêm nhiều phần tử
colors.update(['yellow', 'purple']) # {'red', 'blue', 'green', 'yellow', 'purple'}
# Xóa phần tử
colors.remove('blue') # Xóa (nếu không có -> lỗi)
colors.discard('pink') # Xóa (không lỗi nếu không tồn tại)
colors.pop() # Xóa phần tử ngẫu nhiên
2. Kiểm tra phần tử
nums = {1, 2, 3}
# Kiểm tra tồn tại
print(2 in nums) # True
print(5 not in nums) # True
3. Duyệt set
for item in fruits:
print(item)
IV. Các phép toán tập hợp
Phép toán | Cú pháp | Ví dụ | |
---|---|---|---|
Hợp (Union) | | hoặc union() | `A | B` |
Giao (Intersection) | & hoặc intersection() | A & B | |
Hiệu (Difference) | - hoặc difference() | A - B | |
Hiệu đối xứng (Symmetric Diff) | ^ hoặc symmetric_difference() | A ^ B |
Ví dụ:
A = {1, 2, 3}
B = {3, 4, 5}
print(A | B) # {1, 2, 3, 4, 5} (Hợp)
print(A & B) # {3} (Giao)
print(A - B) # {1, 2} (Hiệu)
print(A ^ B) # {1, 2, 4, 5} (Hiệu đối xứng)
V. Ứng dụng thực tế
1. Loại bỏ phần tử trùng
duplicates = [1, 2, 2, 3, 4, 4]
unique = list(set(duplicates)) # [1, 2, 3, 4]
2. Kiểm tra giao nhau
users_online = {'Alice', 'Bob', 'Charlie'}
admins = {'Alice', 'David'}
# Ai đang online là admin?
online_admins = users_online & admins # {'Alice'}
3. So sánh tập hợp
set1 = {1, 2}
set2 = {1, 2, 3}
print(set1 <= set2) # True (subset)
print(set2 >= set1) # True (superset)
VI. Bài tập thực hành
Bài 1: Tìm từ duy nhất trong đoạn văn
text = "Python is great Python is awesome"
unique_words = set(text.split()) # {'Python', 'is', 'great', 'awesome'}
Bài 2: Đếm số ký tự duy nhất
word = "mississippi"
unique_chars = len(set(word)) # 4 (m, i, s, p)
Bài 3: Tìm phần tử chung giữa 3 list
list1 = [1, 2, 3]
list2 = [2, 3, 4]
list3 = [3, 4, 5]
common = set(list1) & set(list2) & set(list3) # {3}
VII. Tổng kết
- Set lý tưởng cho: loại bỏ trùng lặp, kiểm tra tồn tại, toán tập hợp
- Ưu điểm: Tốc độ tìm kiếm O(1), thao tác nhanh
- Hạn chế: Không lưu thứ tự, không chứa phần tử có thể thay đổi (như list)
Set là công cụ mạnh mẽ giúp xử lý các bài toán về tập hợp hiệu quả! 🚀