Set trong Python là gì?
Set trong Python là kiểu dữ liệu dùng để lưu các phần tử không trùng lặp. Khi học set trong python, bạn đang học một công cụ rất hữu ích để loại bỏ dữ liệu lặp, kiểm tra phần tử có tồn tại hay không và làm việc với các phép toán tập hợp cơ bản.
Hiểu đơn giản: list quan tâm nhiều đến thứ tự, còn set quan tâm nhiều đến tính duy nhất của dữ liệu. Nếu một giá trị xuất hiện nhiều lần, set chỉ giữ lại một lần.
Cách tạo set trong Python
Set thường được viết trong dấu {}.
mon_hoc = {"Python", "HTML", "Python", "C++"}
print(mon_hoc)
Kết quả chỉ còn một giá trị Python vì set tự loại bỏ phần tử trùng.
Bạn cũng có thể tạo set từ list:
so = [1, 2, 2, 3, 3, 3]
tap_so = set(so)
print(tap_so)
Đây là một trong những cách nhanh nhất để xóa dữ liệu trùng lặp. Trong công việc thực tế, thao tác này rất hữu ích khi xử lý email, tag, mã sản phẩm hoặc danh sách môn học.
Thêm và xóa phần tử trong set Python
Set hỗ trợ thêm và xóa phần tử bằng các phương thức cơ bản.
tags = {"python", "web"}
tags.add("backend")
print(tags)
Để xóa phần tử, bạn có thể dùng remove() hoặc discard().
tags.remove("web")
tags.discard("mobile")
print(tags)
Điểm khác nhau là remove() sẽ lỗi nếu phần tử không tồn tại, còn discard() thì không. Khi mới học, bạn nên nhớ điểm này vì nó ảnh hưởng trực tiếp đến việc chương trình có bị dừng vì lỗi hay không.
Set trong Python để loại bỏ dữ liệu trùng
Đây là ứng dụng phổ biến nhất của set.
email = ["a@gmail.com", "b@gmail.com", "a@gmail.com"]
email_khong_trung = set(email)
print(email_khong_trung)
Trong thực tế, bạn có thể dùng kỹ thuật này để làm sạch danh sách email, tag, tên môn học hoặc mã sản phẩm.
Nếu muốn chuyển ngược lại thành list sau khi loại bỏ trùng lặp:
email_list = list(email_khong_trung)
print(email_list)Bạn nên nhớ rằng sau khi đổi sang set, thứ tự phần tử có thể không còn như ban đầu. Nếu cần giữ nguyên thứ tự, bạn phải cân nhắc kỹ hơn. Nhưng với nhiều bài toán cơ bản, chỉ cần loại bỏ trùng là đã đủ hữu ích.
Phép toán tập hợp cơ bản trong Python
Set còn mạnh ở các phép toán tập hợp như giao, hợp và hiệu.
a = {1, 2, 3}
b = {3, 4, 5}
print(a | b)
print(a & b)
print(a - b)
Ý nghĩa:
a | blà hợp của hai tậpa & blà giao của hai tậpa - blà các phần tử có tronganhưng không có trongb
Người mới chưa cần dùng quá sâu, nhưng nên biết rằng set không chỉ để xóa phần tử trùng. Ví dụ, nếu bạn có hai nhóm học viên và muốn tìm những người xuất hiện ở cả hai nhóm, set là công cụ rất phù hợp.
Khi nào nên dùng set thay vì list?
Bạn nên cân nhắc dùng set khi:
- Cần dữ liệu không trùng lặp
- Muốn kiểm tra phần tử có tồn tại nhanh hơn
- Không quá quan trọng thứ tự phần tử
- Muốn làm phép toán tập hợp giữa hai nhóm dữ liệu
Nếu bạn cần giữ nguyên thứ tự và cho phép giá trị trùng lặp, list sẽ phù hợp hơn. Nói cách khác, set mạnh ở tính duy nhất, còn list mạnh ở tính có thứ tự.
Những lỗi thường gặp với set trong Python
- Mong set giữ nguyên thứ tự như list
- Cố truy cập phần tử bằng chỉ số như
set[0] - Nhầm
{}rỗng là set, trong khi đó là dictionary rỗng - Dùng
remove()cho phần tử không tồn tại
tap_rong = set()
print(type(tap_rong))Ví dụ sai thường gặp:
mon_hoc = {"Python", "HTML"}
# Sai vi set khong ho tro chi so
# print(mon_hoc[0])
Một lỗi khác là quên rằng set tự loại bỏ phần tử trùng ngay từ lúc tạo. Vì vậy nếu bạn in ra và thấy số phần tử ít hơn dự kiến, hãy kiểm tra xem dữ liệu đầu vào có bị lặp không.
Bài tập thực hành
Cho list sau:
mon_hoc = ["Python", "HTML", "Python", "CSS", "HTML"]Hãy làm các việc sau:
- Chuyển list thành set để loại bỏ phần tử trùng
- In kết quả ra màn hình
- Thêm một phần tử mới vào set
- Kiểm tra xem
Pythoncó trong set hay không
Gợi ý:
tap_mon_hoc = set(mon_hoc)
print(tap_mon_hoc)Sau đó, thử tạo thêm hai set số nguyên và tính giao, hợp giữa chúng. Bài tập này sẽ giúp bạn thấy set không chỉ dùng để xóa trùng mà còn rất hữu ích khi so sánh hai nhóm dữ liệu.
Câu hỏi thường gặp về set trong Python
Set trong Python có truy cập bằng chỉ số được không?
Không. Set không hỗ trợ chỉ số như list hoặc tuple vì nó không lưu dữ liệu theo vị trí cố định.
Khi nào set hữu ích nhất với người mới?
Set hữu ích nhất khi bạn cần loại bỏ dữ liệu bị lặp, ví dụ danh sách email, tag, tên môn học hoặc mã sản phẩm.
Set và list khác nhau thế nào?
List giữ thứ tự và cho phép phần tử trùng lặp. Set không cho phép trùng lặp và không phù hợp khi bạn cần truy cập theo vị trí.
Tạo set rỗng bằng {} được không?
Không. {} là dictionary rỗng. Nếu muốn tạo set rỗng, bạn phải dùng set().
Tóm tắt
Bạn đã hiểu set trong Python là gì, cách tạo set, thêm xóa phần tử, loại bỏ dữ liệu trùng lặp và làm quen với các phép toán tập hợp cơ bản. Ở bài tiếp theo, chúng ta sẽ học nhập xuất dữ liệu trong Python để chương trình có thể tương tác trực tiếp với người dùng.
Bài viết liên quan

Next.js là gì? Tại sao nên dùng Next.js để làm web?
Giới thiệu Next.js — framework React phổ biến nhất. Tìm hiểu ưu điểm, tính năng nổi bật và khi nào nên dùng.

Con bug đầu tiên trong cuộc đời lập trình viên
Câu chuyện hài hước về lần đầu gặp bug và mất 3 tiếng để tìm ra nguyên nhân chỉ là... thiếu dấu chấm phẩy.

Hướng dẫn cài đặt Python chi tiết trên Windows, macOS, Linux
Hướng dẫn từng bước cài đặt Python trên mọi hệ điều hành. Kèm cách kiểm tra và chạy chương trình đầu tiên.