
Python Sets (Tập hợp trong Python)
1. Set là gì? (giải thích bằng tiếng Việt)
Set trong Python là:
- Một tập hợp các phần tử không trùng lặp.
- Không có thứ tự cố định (mỗi lần in ra có thể khác thứ tự).
- Chứa được nhiều kiểu dữ liệu: số, chuỗi, boolean…
- Nhanh trong kiểm tra xem một phần tử có nằm trong tập hay không.
So với List:
| Thuộc tính | List | Set |
|---|---|---|
| Cho phép giá trị trùng | ✔ Có | ✘ Không |
| Giữ nguyên thứ tự | ✔ Có | ✘ Không |
| Truy cập bằng index | ✔ Có | ✘ Không |
| Tốc độ kiểm tra membership | Chậm hơn | Nhanh hơn |
2. Example: Người dùng nhập danh sách có giá trị trùng lặp
Ví dụ người dùng nhập:
20, 40, 20List sẽ chứa:
[20, 40, 20]→ Khi chạy chương trình, bạn sẽ xử lý 20 hai lần, điều này có thể không mong muốn.
3. Chuyển List → Set để loại bỏ duplicates
Code minh họa
# Danh sách người dùng nhập, có giá trị trùng
list_of_days = [20, 40, 20]
print("Danh sách (list):", list_of_days)
print("Kiểu dữ liệu của list:", type(list_of_days))
# Chuyển thành set để loại bỏ trùng lặp
unique_days = set(list_of_days)
print("Tập hợp (set):", unique_days)
print("Kiểu dữ liệu của set:", type(unique_days))Giải thích:
set(list_of_days)loại bỏ phần tử trùng → chỉ còn phần tử duy nhất.
- List dùng dấu
[ ]
- Set dùng
{ }.
4. Tạo set thủ công
Code mẫu:
# Tạo set chứa tên các tháng
months = {"January", "February", "March"}
print(months)
print(type(months))5. Duyệt phần tử trong Set (không có index)
Set không cho phép truy cập bằng index, ví dụ:
months[0] # ❌ Sai — set không hỗ trợ index➡ Thay vào đó, dùng vòng lặp:
Ví dụ:
months = {"January", "February", "March"}
for month in months:
print("Tháng:", month)6. Thêm phần tử vào Set bằng add()
Code:
months = {"January", "February", "March"}
months.add("April") # Thêm tháng mới
print(months)📝 Lưu ý:
- Không thể thêm phần tử trùng → Python sẽ bỏ qua.
7. Xoá phần tử bằng remove()
Code:
months = {"January", "February", "March"}
months.remove("January") # Xoá phần tử theo giá trị
print(months)Lưu ý quan trọng:
- Nếu phần tử KHÔNG tồn tại →
remove()gây lỗi.
- Với list,
remove()chỉ xoá lần xuất hiện đầu tiên (vì list có thể có trùng).
8. Tính chất quan trọng của Set
Không có thứ tự (unordered)
Mỗi lần in ra set có thể ra thứ tự khác nhau:
days = {10, 45, 30, 10} # 10 trùng sẽ bị loại bỏ
print(days)Kết quả ví dụ:
{10, 30, 45}Thứ tự không cố định — chạy lại sẽ khác.
9. Ví dụ tổng hợp — Xử lý danh sách ngày làm việc không trùng
Code hoàn chỉnh:
# Danh sách người dùng nhập
list_of_days = [10, 45, 30, 10] # 10 nhập hai lần
print("List gốc:", list_of_days)
# Loại bỏ trùng lặp
unique_days = set(list_of_days)
print("Set loại trùng:", unique_days)
# Xử lý từng ngày một
for day in unique_days:
print(f"Tính số giờ cho ngày: {day}")Kết quả mong đợi:
10được xử lý chỉ một lần
- Thứ tự in ra có thể thay đổi
10. Bài tập cho học viên
Bài 1
Người dùng nhập danh sách tên học sinh, có thể trùng.
Hãy dùng set để in ra danh sách tên duy nhất.
Bài 2
Tạo một set rỗng và cho phép người dùng nhập giá trị để thêm vào set bằng add().
Bài 3
Cho set:
colors = {"Red", "Green", "Blue"}- Thêm "Yellow"
- Xoá "Green"
- In kết quả