Trong quá trình phát triển ứng dụng Python, việc làm việc với các set là điều không thể tránh khỏi. Một trong những thao tác thường gặp là kết hợp các tập hợp khác nhau. Bài viết này sẽ đi sâu vào các phương pháp nối set trong Python, cung cấp cho bạn những giải pháp thực tế và hiệu quả để quản lý dữ liệu tập hợp một cách tối ưu.
Các điểm chính
Đọc xong bài viết, bạn sẽ:
- Làm chủ 5 phương pháp nối set trong Python: Nắm vững cú pháp, cách sử dụng và điểm khác biệt giữa các phương pháp nối set với toán tử “
|
” , phương thứcunion()
, phương thứcupdate()
, toán tử Unpacking, và set comprehension. - Biết cách lựa chọn phương pháp nối set phù hợp với từng tình huống cụ thể: Hiểu rõ ưu và nhược điểm của từng phương pháp (tốc độ, dễ đọc, khả năng sửa đổi set ban đầu) để đưa ra quyết định tốt nhất cho dự án.
- Khả năng áp dụng kiến thức vào thực tế: Nhận được những ví dụ minh họa cụ thể, dễ hiểu, giúp người đọc tự tin thực hành và áp dụng các phương pháp nối set vào các bài toán lập trình thực tế.
- Có cái nhìn tổng quan về các kỹ thuật nâng cao với set (set comprehension, Iterative Addition): Nắm những kỹ thuật nâng cao hơn để khám phá, tạo động lực học hỏi thêm.
- Được giới thiệu về dịch vụ VPS Vietnix: Tiết kiệm chi phí và hiệu năng tối ưu.
Nối set trong Python
Nối set trong Python là gộp hai hoặc nhiều set thành một set duy nhất. Khi bạn nối các set, các phần tử của nhiều set sẽ được hợp nhất lại, đồng thời đảm bảo loại bỏ các phần tử trùng lặp, vì set không cho phép các phần tử trùng nhau.

Có nhiều phương pháp để thực hiện việc này, chẳng hạn như sử dụng phép hợp (union), phương thức update, set comprehension, nối set (set concatenation), sao chép, và thêm tuần tự (iterative addition).
Nối set trong Python với toán tử “|”
Ký hiệu “|
” được định nghĩa là toán tử hợp. Nó thực hiện phép toán A∪B và trả về một tập hợp các phần tử có trong A, B hoặc cả hai. Tập hợp không cho phép các phần tử trùng lặp.
Trong ví dụ sau, chúng ta sẽ thực hiện phép hợp trên hai set là s1 và s2 bằng cách sử dụng toán tử “|”. Kết quả là set mới s3 sẽ chứa các phần tử từ cả hai set ban đầu, và loại bỏ các phần tử trùng lặp:
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8}
s3 = s1 | s2
print(s3)
Kết quả của đoạn code trên sẽ là:
{1, 2, 3, 4, 5, 6, 7, 8}
Giải thích:
- Hai set
s1
vàs2
được khởi tạo, chứa một số giá trị số nguyên. - Toán tử
|
được sử dụng để thực hiện phép hợp giữas1
vàs2
. s3
bây giờ là một set mới chứa tất cả các phần tử độc nhất (không trùng) từs1
vàs2
. Như bạn có thể thấy, các số 4 và 5 chỉ xuất hiện một lần trongs3
mặc dù giá trị của chúng xuất hiện ở cả hai set.
Nối set trong Python với phương thức union()
Phương thức này thực hiện cùng chức năng với toán tử |
. Phương thức trả về một đối tượng set mới, đối tượng này chứa tất cả các phần tử trong cả hai set ban đầu và loại bỏ các phần tử trùng lặp. Đây cũng là một cách để nối set trong Python.
Trong ví dụ sau, chúng ta sẽ gọi phương thức union()
trên set s1, và truyền set s2 vào như một đối số. Kết quả trả về sẽ là một set mới có tên là s3, set này sẽ chứa tất cả các phần tử từ cả hai set s1 và s2, nhưng không có phần tử nào bị trùng lặp:
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8}
s3 = s1.union(s2)
print(s3)
Kết quả sau khi chạy code:
{1, 2, 3, 4, 5, 6, 7, 8}
Giải thích code:
- Hai set,
s1
vàs2
, được khởi tạo với các giá trị số nguyên khác nhau: - Phương thức
union()
được gọi trêns1
, vớis2
được truyền vào như một đối số. Điều này tạo ra một set mớis3
: s3
chứa tất cả các phần tử từ cảs1
vàs2
, không có phần tử trùng lặp (lưu ý: số 4 và 5 xuất hiện ở cảs1
vàs2
, nhưng chỉ xuất hiện một lần trongs3
):- Giá trị của
s3
được in ra, hiển thị các phần tử duy nhất từ cả hai set ban đầu:
Nối set trong Python với phương thức update()
Phương thức update()
cũng có khả năng nối hai set lại với nhau, tương tự như phương thức union()
. Tuy nhiên, điểm khác biệt là update()
không tạo ra một set mới. Thay vào đó, phương thức này thêm các phần tử của set thứ hai vào set thứ nhất, và loại bỏ các phần tử trùng lặp.
Trong ví dụ dưới đây, chúng ta sẽ cập nhật set s1 bằng các phần tử của set s2 sử dụng phương thức update()
. Việc này làm thay đổi s1, khiến s1 chứa các phần tử từ cả hai set ban đầu, không có phần tử nào trùng lặp:
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8}
s1.update(s2) # Nối set s2 vào s1
print(s1)
Kết quả thu được như sau:
{1, 2, 3, 4, 5, 6, 7, 8}
Giải thích code:
- Khai báo hai set:
s1
vàs2
, mỗi set chứa một số phần tử. s1.update(s2)
: Câu lệnh này thực hiện nối sets2
vàos1
. Các phần tử củas2
sẽ được thêm vàos1
. Nếu có phần tử nào xuất hiện ở cả hai set (trong trường hợp này là 4 và 5), set kết quả sẽ chỉ giữ lại một phần tử duy nhất (tính chất của set).print(s1)
: In ra sets1
sau khi đã được cập nhật.
Nối set trong Python với toán tử Unpacking
Trong Python, ký hiệu *
được sử dụng như một toán tử unpacking. Toán tử unpacking này, về bản chất, sẽ gán từng phần tử trong một collection cho các biến riêng biệt. Chúng ta có thể nối set trong Python bằng cách sử dụng toán tử unpacking (*
) để giải nén các phần tử của nhiều set vào một set mới.
Trong ví dụ sau, chúng ta tạo một set mới s3 bằng cách giải nén các phần tử của các set s1 và s2 sử dụng toán tử *
bên trong một set literal (cặp dấu ngoặc nhọn {}
):
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8}
s3 = {*s1, *s2} # Dùng toán tử * để "giải nén" và nối
print(s3)
Kết quả in ra sẽ là:
{1, 2, 3, 4, 5, 6, 7, 8}
Giải thích chi tiết:
s1 = {1, 2, 3, 4, 5}
vàs2 = {4, 5, 6, 7, 8}
: Khai báo và khởi tạo hai sets1
vàs2
với các giá trị ban đầu.s3 = {*s1, *s2}
:- Dấu
{}
: Biểu thị việc tạo một set mới. *s1
: Toán tử unpacking*
đứng trướcs1
. Nó “mở”s1
ra, lấy từng phần tử củas1
(1
,2
,3
,4
,5
) và đưa vào set mới.*s2
: Tương tự,*s2
“mở”s2
ra, lấy từng phần tử củas2
(4
,5
,6
,7
,8
) đưa vào set mới.- Do Set là tập hợp chứa phần tử unique (không trùng lặp),
s3
được tạo thành sẽ loại bỏ những phần tử nào đã có trong sets1
rồi thì không đưa vào sets3
nữa, nghĩa là set là một tập hợp các phần tử riêng biệt. print(s3)
: In sets3
ra màn hình, các số1
,2
,3
,4
,5
,6
,7
,8
sẽ xuất hiện.
Nối set với set comprehension trong Python
Chúng ta có thể thực hiện việc Nối set Trong Python bằng cách sử dụng set comprehension, bằng phương pháp duyệt qua nhiều set và thêm các phần tử của các set đó vào một set mới.
Ví dụ:
tap_hop_mon_hoc_yeu_thich_nam = {"Toán", "Lý", "Tin học"}
tap_hop_mon_hoc_yeu_thich_hoa = {"Văn", "Sử", "Địa", "Toán"}
# Sử dụng set comprehension để tạo một set chứa tất cả các môn học yêu thích
tap_hop_tat_ca_mon_hoc = {mon_hoc for tap_hop in [tap_hop_mon_hoc_yeu_thich_nam, tap_hop_mon_hoc_yeu_thich_hoa] for mon_hoc in tap_hop}
print(tap_hop_tat_ca_mon_hoc)
Kết quả chạy code:
{‘Lý’, ‘Văn’, ‘Toán’, ‘Địa’, ‘Sử’, ‘Tin học’}
Giải thích:
tap_hop_mon_hoc_yeu_thich_nam
vàtap_hop_mon_hoc_yeu_thich_hoa
: Đây là hai set, mỗi set chứa các môn học yêu thích của Nam và Hoa.{mon_hoc for tap_hop in [tap_hop_mon_hoc_yeu_thich_nam, tap_hop_mon_hoc_yeu_thich_hoa] for mon_hoc in tap_hop}
: Đây chính là “set comprehension”. Hãy phân tích kỹ hơn:for tap_hop in [tap_hop_mon_hoc_yeu_thich_nam, tap_hop_mon_hoc_yeu_thich_hoa]
: Vòng lặp này duyệt qua từng set trong danh sách các set (danh sách ở đây có hai phần tử là hai set môn học).for mon_hoc in tap_hop
: Với mỗi set (tap_hop
) có được ở bước trên, vòng lặp này duyệt qua từng phần tử (mon_hoc
) bên trong set đó.mon_hoc
: Đây là biểu thức được áp dụng cho mỗi phần tử. Trong trường hợp này, chúng ta chỉ đơn giản là lấy chính phần tử đó (mon_hoc
) để đưa vào set mới.
- Kết quả,
tap_hop_tat_ca_mon_hoc
sẽ là một set chứa tất cả các môn học yêu thích của cả Nam và Hoa (và loại bỏ các môn học trùng lặp, vì set không chứa các phần tử trùng nhau).
Nối set trong Python bằng Iterative Addition
Thêm tuần tự trong ngữ cảnh của set ám chỉ việc thêm các phần tử từ một set vào một set khác bằng cách sử dụng vòng lặp hoặc cấu trúc lặp. Thao tác này cho phép bạn hợp nhất các phần tử của nhiều set vào một set duy nhất, đảm bảo rằng các phần tử trùng lặp không bị lặp lại.
Chúng ta có thể nối set trong Python bằng cách duyệt qua các phần tử của từng set và thêm các phần tử đó vào một set mới.
Trong ví dụ dưới đây, chúng ta khởi tạo một set rỗng. Sau đó, ta duyệt qua từng phần tử trong set1 và set2 một cách riêng biệt, thêm từng phần tử vào một set mới có tên là joined_set
bằng phương thức add()
:
set1 = {"táo", "chuối", "cam"}
set2 = {"cam", "quýt", "xoài"}
# Khởi tạo một set rỗng để chứa các phần tử được hợp nhất
joined_set = set()
# Duyệt qua set1 và thêm các phần tử vào set mới
for phan_tu in set1:
joined_set.add(phan_tu)
# Duyệt qua set2 và thêm các phần tử vào set mới
for phan_tu in set2:
joined_set.add(phan_tu)
print(joined_set)
Sau khi thực thi đoạn mã trên, kết quả sẽ là:
{‘chuối’, ‘táo’, ‘quýt’, ‘xoài’, ‘cam’}
Giải thích code:
set1
vàset2
: được khởi tạo với các giá trị khác nhau (ở đây là các loại trái cây để dễ hình dung).joined_set = set()
: Tạo một set rỗng. Set này sẽ được dùng để chứa tất cả phần tử củaset1
vàset2
sau khi gộp.Vòng lặp for phan_tu in set1:
: duyệt qua từng phần tử trongset1
. Bên trong vòng lặp,joined_set.add(phan_tu)
thêm từng phần tử đó vàojoined_set
.Vòng lặp for phan_tu in set2:
: thực hiện tương tự choset2
. Chú ý là mặc dù “cam” xuất hiện trong cảset1
vàset2
, nó chỉ xuất hiện một lần trongjoined_set
bởi vì set không cho phép các phần tử trùng lặp.Cuối cùng, print(joined_set)
: in rajoined_set
sau khi đã hợp nhất, các phần tử trongjoined_set
không có thứ tự.
Dịch vụ VPS Vietnix: Tiết kiệm chi phí và hiệu năng tối ưu
Vietnix mang đến dịch vụ VPS mạnh mẽ với tốc độ tải trang vượt trội, tối ưu trải nghiệm người dùng và thúc đẩy tăng trưởng kinh doanh. Sử dụng ổ cứng SSD/NVMe Enterprise, CPU Intel Xeon/AMD, công nghệ ảo hóa hiện đại và tốc độ mạng cao (200 Mbps trong nước, 20 Mbps quốc tế), VPS Vietnix đảm bảo website hoạt động ổn định, an toàn và nâng cao uy tín thương hiệu. Dịch vụ bao gồm sao lưu dữ liệu tự động hàng tuần trên server độc lập, khôi phục dữ liệu dễ dàng qua giao diện quản trị, tùy chỉnh máy chủ linh hoạt, và đa dạng hệ điều hành (Windows Server, Windows, Ubuntu, Debian, AlmaLinux, CentOS).
Tận hưởng hiệu suất cao với chi phí tiết kiệm cùng dịch vụ VPS Giá Rẻ của Vietnix. Đa dạng gói dịch vụ phù hợp với ngân sách, khởi tạo nhanh chóng và dễ dàng nâng cấp/hạ cấp. Tăng tốc website và giữ chân khách hàng với ổ cứng SSD Enterprise RAID 10, tốc độ mạng 100 Mbps, và datacenter chuẩn Tier 3. Dữ liệu được bảo vệ an toàn với hệ thống backup tự động hàng tuần trên server độc lập và dễ dàng khôi phục. Vietnix cam kết uptime 99.9% với chính sách đền bù minh bạch, cùng các chứng nhận ISO 27001:2022 và ISO 9001:2015, đảm bảo an toàn và chất lượng dịch vụ. Xây dựng website, blog, cửa hàng trực tuyến hiệu quả và an toàn với VPS Giá Rẻ Vietnix.
Thông tin liên hệ:
- Hotline: 18001093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Website: https://vietnix.vn/
Vậy là chúng ta vừa cùng nhau khám phá các phương pháp nối set trong Python, từ sử dụng toán tử |, phương thức union(), update(), đến toán tử Unpacking, set comprehension và Iterative Addition. Hy vọng bài viết này đã cung cấp cho bạn những kiến thức hữu ích để xử lý dữ liệu hiệu quả hơn trong các dự án Python của mình.
Mọi người cũng đọc