Bỏ qua

Image

Chủ đề: Set trong Python

I. Lý thuyết

1. Định nghĩa

Set (tập hợp) là một kiểu dữ liệu trong Python dùng để lưu trữ các giá trị không trùng lặpkhông có thứ tự xác định.

2. Đặc điểm của Set

  • Không chứa phần tử trùng lặp.
  • Không có thứ tự (unordered).
  • Không thể truy cập phần tử bằng chỉ số.
  • Có thể thêm và xóa phần tử.
  • Mỗi phần tử là kiểu dữ liệu không thay đổi (immutable).

3. Khai báo Set

Cách 1: Sử dụng dấu ngoặc nhọn {}
Cách 2: Dùng hàm set()

a = {1, 2, 3}
b = set([4, 5, 6])

Khai báo Set rỗng set()

a = set()

II. Các thao tác với Set

1. Thêm phần tử

a = {1, 2}
a.add(3)

2. Xóa phần tử

a = {1, 2, 3}
a.remove(2)     # Xóa phần tử 2 (báo lỗi nếu không tồn tại)
a.discard(5)    # Xóa phần tử 5 (không báo lỗi nếu không có)

# Xóa ngẫu nhiên một phần tử
a = {1, 2, 3, 4, 5}
phan_tu_ngau_nhien = a.pop()  # Xóa và trả về một phần tử ngẫu nhiên
print(f"Đã xóa phần tử: {phan_tu_ngau_nhien}")
print(f"Set còn lại: {a}")

# Xóa toàn bộ phần tử
a.clear()       # Xóa tất cả phần tử trong Set
print(a)        # Kết quả: set()

3. Duyệt Set

a = {1, 2, 3}
for x in a:
    print(x)

4. Các phép toán tập hợp

Giả sử:

a = {1, 2, 3}
b = {3, 4, 5}
Tên phép toán Cách viết Kết quả
Hợp (Union) a | b hoặc a.union(b) {1, 2, 3, 4, 5}
Giao (Intersection) a & b hoặc a.intersection(b) {3}
Hiệu (Difference) a - b hoặc a.difference(b) {1, 2}
Phần bù đối xứng a ^ b hoặc a.symmetric_difference(b) {1, 2, 4, 5}

III. Ví dụ minh họa

Ví dụ 1: Tạo Set và loại bỏ phần tử trùng

mon_hoc = {"Toán", "Lý", "Hóa", "Toán"}
print(mon_hoc)

Ví dụ 2: Kiểm tra phần tử có trong Set hay không

mon_hoc = {"Toán", "Lý", "Hóa"}
if "Toán" in mon_hoc:
    print("Có học Toán")

Ví dụ 3: Thêm phần tử mới vào Set

mon_hoc = {"Toán", "Lý"}
mon_hoc.add("Sinh")
print(mon_hoc)

Ví dụ 4: Phép toán giao

a = {1, 2, 3}
b = {2, 3, 4}
print(a & b)

IV. Bài tập vận dụng tại lớp

Bài 1: Quản lý môn học yêu thích

Đề bài: Tạo một Set chứa các tên môn học yêu thích. Thực hiện:

  • Thêm một môn học mới.
  • Xóa một môn học.
  • In toàn bộ môn học còn lại.
💡 Phân tích đề

Các bước thực hiện:

  1. Tạo Set chứa các môn học ban đầu
  2. Sử dụng add() để thêm môn học mới
  3. Sử dụng discard() để xóa môn học (an toàn hơn remove())
  4. In Set kết quả (không có thứ tự cố định)

Input/Output mẫu:

Thao tác Set ban đầu Thao tác Set kết quả
Tạo Set {"Toán", "Tin học", "Anh"} 3 môn học
Thêm add("Văn") {"Toán", "Tin học", "Anh", "Văn"}
Xóa discard("Anh") {"Toán", "Tin học", "Văn"}
💡 Gợi ý code
# Tạo Set môn học yêu thích
mon_yeu_thich = {"Toán", "Tin học", "Anh"}

# Thêm môn học mới
mon_yeu_thich.add("Văn")

# Xóa một môn học
mon_yeu_thich.discard("Anh")

# In kết quả
print(mon_yeu_thich)

Bài 2: Phép toán tập hợp

Đề bài: Cho hai Set sau:

lop_a = {"An", "Bình", "Cường", "Duy"}
lop_b = {"Bình", "Duy", "Hà", "Khánh"}

Thực hiện:

  • Tìm học sinh có mặt ở cả hai lớp.
  • Tìm học sinh chỉ có ở lớp A.
  • Tìm học sinh có ở một trong hai lớp nhưng không có mặt ở cả hai.
💡 Phân tích đề

Các bước thực hiện:

  1. Sử dụng phép giao (&) để tìm phần tử chung
  2. Sử dụng phép hiệu (-) để tìm phần tử chỉ có ở lớp A
  3. Sử dụng phép hiệu đối xứng (^) cho phần tử ở một trong hai
  4. In kết quả từng phép toán

Input/Output mẫu:

Phép toán Ký hiệu Kết quả
Giao lop_a & lop_b {"Bình", "Duy"}
Hiệu lop_a - lop_b {"An", "Cường"}
Hiệu đối xứng lop_a ^ lop_b {"An", "Cường", "Hà", "Khánh"}
💡 Gợi ý code
# Hai Set lớp học
lop_a = {"An", "Bình", "Cường", "Duy"}
lop_b = {"Bình", "Duy", "Hà", "Khánh"}

# Phép giao - có ở cả hai lớp
ca_hai_lop = lop_a & lop_b

# Phép hiệu - chỉ có ở lớp A
chi_lop_a = lop_a - lop_b

# Hiệu đối xứng - chỉ có ở một trong hai
chi_mot_trong_hai = lop_a ^ lop_b

# In kết quả
print("Cả hai lớp:", ca_hai_lop)
print("Chỉ lớp A:", chi_lop_a)
print("Chỉ một trong hai:", chi_mot_trong_hai)

V. Bài tập về nhà

Bài 1: Xử lý danh sách trùng lặp

Đề bài: Viết chương trình nhập vào hai danh sách tên học sinh (dạng list), chuyển thành Set và thực hiện:

  • Loại bỏ tên trùng lặp.
  • Tìm tên có ở cả hai danh sách.
  • In ra tên chỉ có ở danh sách thứ nhất.
💡 Phân tích đề

Các bước thực hiện:

  1. Nhập hai danh sách tên học sinh dạng list
  2. Chuyển list thành set để tự động loại bỏ trùng lặp
  3. Sử dụng phép giao (&) để tìm tên chung
  4. Sử dụng phép hiệu (-) để tìm tên chỉ có ở danh sách đầu
  5. In kết quả từng bước xử lý

Input/Output mẫu:

Danh sách 1 Danh sách 2 Chung Chỉ danh sách 1
["An", "Bình", "An", "Cường"] ["Bình", "Duy", "Bình"] {"Bình"} {"An", "Cường"}

Bài 2: Lọc số chẵn trong Set

Đề bài: Tạo Set chứa các số từ 1 đến 10. Xóa tất cả các số chẵn khỏi Set và in ra kết quả.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo Set chứa số từ 1 đến 10 bằng range()
  2. Duyệt qua các phần tử trong Set
  3. Tìm các số chẵn (số % 2 == 0)
  4. Xóa các số chẵn khỏi Set
  5. In Set kết quả chỉ chứa số lẻ

Input/Output mẫu:

Set ban đầu Số chẵn cần xóa Set kết quả
{1,2,3,4,5,6,7,8,9,10} {2,4,6,8,10} {1,3,5,7,9}

VI. Ghi chú

  • Set dùng tốt khi cần kiểm tra phần tử trùng và xử lý tập hợp.
  • Không sử dụng Set nếu cần giữ thứ tự hoặc cần truy cập theo chỉ số.