Thao tác với set là một phần quan trọng trong lập trình, trong đó, việc loại bỏ phần tử là một nhu cầu thường gặp. Có nhiều phương thức khác nhau để thực hiện việc này, mỗi phương thức có những đặc điểm và ứng dụng riêng. Bài viết này mình sẽ giới thiệu một vài cách cơ bản, thường dùng để loại bỏ phần tử khỏi set trong Python.
Các điểm chính
Đọc xong bài viết, bạn sẽ:
- Hiểu các phương pháp xóa phần tử khỏi set: Làm quen với các cách cơ bản như
remove()
,discard()
,pop()
, vàclear()
. - Phân biệt
remove()
vàdiscard()
: Biết khi nào dùng từng phương thức để xóa phần tử mà không gặp lỗi, kèm ví dụ thực tế. - Sử dụng
pop()
vàclear()
đúng cách: Học cách xóa ngẫu nhiên hoặc xóa toàn bộ phần tử trong set chỉ với một lệnh đơn giản. - Nắm vững các thao tác với nhiều set: Tìm hiểu cách xóa phần tử chung, không chung, hoặc lấy hiệu đối xứng giữa các set với
intersection()
và các phương thức khác. - Áp dụng ngay vào lập trình: Các ví dụ dễ hiểu giúp bạn tự tin thử nghiệm và viết code hiệu quả hơn.
- Tìm hiểu về dịch vụ VPS Vietnix – Giải pháp tăng tốc website và quản lý dễ dàng.
Xóa phần tử khỏi set trong Python
Xóa phần tử khỏi set có nghĩa là loại bỏ các phần tử ra khỏi một set. Trong Python, set là một tập hợp các phần tử có các đặc điểm sau, có thể thay đổi, không có thứ tự, và chứa các phần tử độc nhất. Có nhiều phương thức để thực hiện việc xóa phần tử khỏi set trong Python dựa trên các tiêu chí khác nhau.

Chúng ta có thể xóa các phần tử của set trong Python bằng nhiều phương thức như remove()
, discard()
, pop()
, clear()
, và set comprehension. Mỗi phương thức cung cấp những cách khác nhau để loại bỏ phần tử từ set, dựa trên các điều kiện hoặc tiêu chí cụ thể.
Xóa phần tử khỏi set với phương thức remove()
Chúng ta có thể xóa phần tử khỏi set trong Python bằng cách sử dụng remove()
, chỉ định phần tử muốn xóa. Nếu phần tử này tồn tại trong set, phần tử đó sẽ bị loại bỏ. Tuy nhiên, nếu phần tử không tồn tại, phương thức remove()
sẽ gây ra lỗi KeyError.
Ví dụ 1
Trong ví dụ sau, chúng ta sẽ xóa phần tử “Vật lý
” khỏi set my_set
bằng phương thức remove():
my_set = {"Rohan", "Vật lý", 21, 69.75}
print("Set ban đầu:", my_set)
my_set.remove("Vật lý")
print("Set sau khi xóa:", my_set)
Kết quả của đoạn mã:
Set ban đầu: {21, 69.75, ‘Rohan’, ‘Vật lý’}
Set sau khi xóa: {21, 69.75, ‘Rohan’}
Giải thích:
- Dòng đầu tiên khởi tạo một set tên là
my_set
chứa các phần tử khác nhau. - Dòng
print()
đầu tiên hiển thị set ban đầu. my_set.remove("Vật lý")
: Dòng này sử dụng phương thứcremove()
để xóa phần tử có giá trị"Vật lý"
khỏimy_set
.- Dòng
print()
thứ hai in ra set sau khi phần tử"Vật lý"
đã bị xóa. Kết quả cho thấy phần tử"Vật lý"
không còn trong set.
Ví dụ 2
Nếu phần tử cần xóa không có trong set, phương thức remove()
sẽ phát sinh lỗi KeyError:
my_set = {"Rohan", "Vật lý", 21, 69.75}
print("Set ban đầu:", my_set)
my_set.remove("PHP") # "PHP" không có trong set
print("Set sau khi xóa:", my_set)
Kết quả:
Set ban đầu: {‘Vật lý’, 21, 69.75, ‘Rohan’}
Traceback (most recent call last):
File “/home/cg/root/664c365ac1c3c/main.py”, line 4, in <module>
my_set.remove(“PHP”)
KeyError: ‘PHP’
Giải thích:
- Trong đoạn mã trên, mọi thứ gần như được giữ nguyên, chỉ đổi phần tử
"PHP"
được gán vào lời gọi hàmremove
, và"PHP"
thì không nằm trongmy_set
my_set.remove("PHP")
: Cố gắng xóa phần tử"PHP"
. Vì"PHP"
không có trongmy_set
, nên Python báo lỗiKeyError
.- Đây là thông báo cho bạn biết rằng bạn đang cố gắng xóa một phần tử không tồn tại trong set.
Lưu ý: remove()
chỉ xóa lần xuất hiện đầu tiên của phần tử trong set (trong trường hợp phần tử đó xuất hiện nhiều lần). Vì set vốn là tập hợp các phần tử duy nhất và không có thứ tự, nên việc có nhiều phần tử trùng nhau là điều hiếm gặp, và vị trí các phần tử trong set không quan trọng khi xóa
Xóa phần tử khỏi set với phương thức discard()
Phương thức discard()
trong class set cũng tương tự như phương thức remove()
. Điểm khác biệt duy nhất là discard()
không gây ra lỗi ngay cả khi phần tử cần xóa không có trong set. Điều này có nghĩa khi bạn muốn xóa phần tử khỏi set trong Python mà bạn không chắc phần tử có tồn tại trong đó hay không thì dùng discard.
Trong ví dụ này, chúng ta sử dụng phương thức discard()
để xóa một phần tử khỏi set, bất kể phần tử đó có tồn tại hay không:
my_set = {"Táo", "Cam", 21, 69.75}
print("Set ban đầu: ", my_set)
# Xóa một phần tử có tồn tại
my_set.discard("Cam")
print("Set sau khi xóa 'Cam': ", my_set)
# Xóa một phần tử không tồn tại
my_set.discard("Mận")
print("Set sau khi xóa phần tử không tồn tại 'Mận': ", my_set)
Kết quả của đoạn code trên như sau:
Set ban đầu: {‘Táo’, 69.75, 21, ‘Cam’}
Set sau khi xóa ‘Cam’: {‘Táo’, 69.75, 21}
Set sau khi xóa phần tử không tồn tại ‘Mận’: {‘Táo’, 69.75, 21}
Giải thích:
Dòng đầu tiên tạo một set tên là my_set chứa các phần tử "Táo", "Cam", 21 và 69.75.
my_set.discard("Cam")
: xóa phần tử"Cam"
khỏi set. Vì"Cam"
có trong set, phần tử này được xóa.my_set.discard("Mận")
: cố gắng xóa phần tử"Mận"
. Vì"Mận"
không có trongmy_set
, phương thứcdiscard()
không làm gì cả và không có lỗi nào xảy ra.Như bạn có thể thấy ở kết quả in ra, dòng lệnh xóa "Mận" không làm thay đổi set.
Xóa phần tử khỏi set với phương thức pop()
Chúng ta có thể xóa phần tử khỏi set bằng cách sử dụng phương thức pop()
. Phương thức này sẽ loại bỏ và trả về một phần tử bất kỳ từ set. Nếu set rỗng, phương thức pop()
sẽ gây ra lỗi KeyError.
Ví dụ 1
Trong ví dụ dưới đây, chúng ta định nghĩa một set với các phần tử từ “1
” đến “5
” và xóa một phần tử bất kỳ khỏi set bằng phương thức pop()
:
# Định nghĩa một set
my_set = {1, 2, 3, 4, 5}
# Xóa và trả về một phần tử bất kỳ từ set
removed_element = my_set.pop()
# In ra phần tử đã bị xóa và set sau khi cập nhật
print("Phần tử bị xóa:", removed_element)
print("Set sau khi cập nhật:", my_set)
Kết quả chúng ta nhận được như sau:
Phần tử bị xóa: 1
Set sau khi cập nhật: {2, 3, 4, 5}
Giải thích:
my_set = {1, 2, 3, 4, 5}
: Tạo một set có tênmy_set
với các giá trị 1, 2, 3, 4, và 5.removed_element = my_set.pop()
: Gọi phương thứcpop()
trênmy_set
. Phương thức này loại bỏ một phần tử ngẫu nhiên từmy_set
và gán giá trị của phần tử đó cho biếnremoved_element
. Lưu ý, vì set là không có thứ tự, bạn không thể biết trước phần tử nào sẽ bị xóa.print("Phần tử bị xóa:", removed_element)
: In ra giá trị của phần tử vừa bị loại bỏ.print("Set sau khi cập nhật:", my_set)
: In ra set sau khi một phần tử đã bị xóa.
Ví dụ 2
Nếu chúng ta cố gắng xóa phần tử khỏi set trong Python khi set đó rỗng, phương thức pop()
sẽ phát sinh ngoại lệ KeyError:
# Định nghĩa một set rỗng
empty_set = set()
# Xóa một phần tử bất kỳ từ set rỗng (sẽ gây lỗi)
removed_element = empty_set.pop()
Lỗi hiển thị sẽ như sau:
Traceback (most recent call last):
File “/home/cg/root/664c69620cd40/main.py”, line 5, in <module>
removed_element = empty_set.pop()
KeyError: ‘pop from an empty set’
Giải thích:
empty_set = set()
: Tạo một set rỗng.removed_element = empty_set.pop()
: Dòng này cố gắng gọipop()
trên set rỗngempty_set
. Vì không có phần tử nào để loại bỏ, Python sẽ báo lỗiKeyError
.- Thông báo lỗi
KeyError
:'pop from an empty set'
cho biết rằng không thể thực hiệnpop()
trên set rỗng.
Dùng phương thức clear() để xóa phần tử khỏi set trong Python
Chúng ta có thể xóa phần tử khỏi set trong Python bằng cách sử dụng phương thức clear()
, thao tác này sẽ loại bỏ tất cả các phần tử, và biến set đó thành rỗng.
Trong ví dụ sau, chúng ta sẽ định nghĩa một set chứa các phần tử từ “1” đến “5”, và sau đó dùng phương thức clear()
để xóa tất cả các phần tử của set này:
# Định nghĩa một set với nhiều phần tử
my_set = {1, 2, 3, 4, 5}
# Xóa tất cả các phần tử khỏi set
my_set.clear()
# In ra set sau khi đã cập nhật
print("Set sau khi cập nhật:", my_set)
Kết quả đầu ra sẽ như sau:
Set sau khi cập nhật: set()
Giải thích:
my_set = {1, 2, 3, 4, 5}
: Tạo một set có tên làmy_set
và gán các giá trị 1, 2, 3, 4, 5 vào set đó.my_set.clear()
: Gọi phương thứcclear()
trên setmy_set
. Phương thức này không cần truyền tham số. Sau khi thực hiện lệnh này,my_set
sẽ không còn chứa bất kỳ phần tử nào.print("Set sau khi cập nhật:", my_set)
: In ra set sau khi cập nhật, chúng ta thấy kết quảset()
là một set rỗng.
Xóa các phần tử tồn tại trong cả 2 set
Bạn có thể loại bỏ các phần tử tồn tại trong cả hai set bằng cách sử dụng phương thức difference_update()
hoặc toán tử trừ (-=
). Thao tác này xóa phần tử khỏi set trong Python, cụ thể là các phần tử xuất hiện ở cả hai set, khỏi set gốc.
Trong ví dụ này, chúng ta định nghĩa hai set, s1 và s2, sau đó sử dụng phương thức difference_update()
để loại bỏ các phần tử từ s1 mà cũng có trong s2:
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8}
print("s1 trước khi chạy difference_update:", s1)
s1.difference_update(s2)
print("s1 sau khi chạy difference_update:", s1)
Sau khi thực thi đoạn mã trên, kết quả hiển thị sẽ như sau:
s1 trước khi chạy difference_update: {1, 2, 3, 4, 5}
s1 sau khi chạy difference_update: {1, 2, 3}
Giải thích chi tiết:
s1 = {1, 2, 3, 4, 5}
vàs2 = {4, 5, 6, 7, 8}
: Khởi tạo hai set,s1
vàs2
, với các giá trị số nguyên.print("s1 trước khi...", s1)
: In ra nội dung củas1
trước khi thực hiện thao tác loại bỏ phần tử.s1.difference_update(s2)
: Đây là điểm mấu chốt. Phương thứcdifference_update()
được gọi trêns1
. Phương thức này sẽ loại bỏ khỏis1
tất cả các phần tử cũng xuất hiện trongs2
. Trong trường hợp này, số 4 và 5 đều có mặt ở cả hai set, nên chúng bị loại khỏis1
.print("s1 sau khi...", s1)
: In ra nội dung củas1
sau khi thực hiệndifference_update()
. Kết quả cho thấys1
chỉ còn lại {1, 2, 3}.
Xóa phần tử tồn tại ở một trong 2 set
Để loại bỏ các phần tử xuất hiện ở một trong hai set, bạn có thể sử dụng phép toán hiệu đối xứng. Hiệu đối xứng giữa hai set tạo ra một set mới chứa các phần tử chỉ xuất hiện ở một trong hai set ban đầu, nhưng không nằm trong phần giao của hai set đó.
Trong Python, phép toán hiệu đối xứng có thể được thực hiện bằng cách sử dụng toán tử ^
hoặc phương thức symmetric_difference()
.
Trong ví dụ sau, chúng ta định nghĩa hai set, set1 và set2. Sau đó, sử dụng toán tử hiệu đối xứng (^
) để tạo một set mới, result_set
, chứa các phần tử chỉ có mặt trong set1 hoặc set2, không phải cả hai:
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# Loại bỏ các phần tử có trong một trong hai tập hợp.
result_set = set1 ^ set2
print("Set kết quả:", result_set)
Kết quả của đoạn mã trên:
Set kết quả: {1, 2, 5, 6}
Giải thích:
set1
vàset2
: được khởi tạo với các giá trị số nguyên khác nhau.result_set = set1 ^ set2
: Câu lệnh này thực hiện phép toán hiệu đối xứng giữaset1
vàset2
. Kết quả được gán cho biếnresult_set
. Toán tử^
trả về một set mới, không làm thay đổiset1
hayset2
.- Kết quả được in ra màn hình bằng câu lệnh
print()
. Các phần tử 3 và 4 đã bị bỏ qua.
Xóa các phần tử không chung giữa các set
Bạn có thể loại bỏ các phần tử không chung giữa hai set bằng cách sử dụng phương thức intersection_update()
. Phép giao của hai set sẽ tạo ra một set mới chỉ chứa các phần tử có mặt trong cả hai set ban đầu.
Để chỉ giữ lại các phần tử chung trong một set gốc và xóa phần tử khỏi set trong Python đối với các phần tử không chung, bạn có thể cập nhật set đó bằng phép giao của chính set đó với set kia.
Trong ví dụ này, ta định nghĩa hai set là set1 và set2. Sau đó, ta dùng phương thức intersection_update()
để thay đổi set1, sao cho set1 chỉ còn chứa các phần tử có trong cả set2:
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# Chỉ giữ lại các phần tử chung trong set1
set1.intersection_update(set2)
print("Set 1 sau khi chỉ giữ lại các phần tử chung:", set1)
Kết quả của đoạn code trên như sau:
Set 1 sau khi chỉ giữ lại các phần tử chung: {3, 4}
Giải thích:
set1 = {1, 2, 3, 4}
vàset2 = {3, 4, 5, 6}
: Khai báo hai set với các phần tử ban đầu.set1.intersection_update(set2)
: Đây là dòng code quan trọng. Phương thứcintersection_update()
được gọi trênset1
, và tham số truyền vào làset2
.- Phương thức này sẽ thực hiện phép giao giữa
set1
vàset2
(tìm các phần tử chung). - Kết quả của phép giao sẽ được cập nhật trực tiếp vào
set1
. Nghĩa làset1
sẽ bị thay đổi, các phần tử không chung (1 và 2) sẽ bị loại bỏ, vàset1
chỉ còn chứa các phần tử chung (3 và 4). print("Set 1 sau khi chỉ giữ lại các phần tử chung:", set1)
: In raset1
sau khi đã được cập nhật.
Phương thức intersection()
Phương thức intersection()
trong lớp set của Python tương tự như phương thức intersection_update()
, điểm khác biệt là intersection()
trả về một set mới chứa các phần tử chung giữa các set hiện có.
Cú pháp
Dưới đây là cú pháp cơ bản của phương thức intersection()
:
set.intersection(obj)
Trong đó, obj là một đối tượng set. Phương thức intersection()
trả về một đối tượng set, chỉ giữ lại những phần tử có mặt trong cả set gốc và obj.
Ví dụ
Trong ví dụ sau ta có hai set có tên là “s1” và “s2”, và sau đó tạo ra 1 set mới bằng cách sử dụng intersection()
. Và các giá trị có trong set mới là các phần tử có trong cả “s1” và “s2”
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8}
print("s1: ", s1, "s2: ", s2)
s3 = s1.intersection(s2)
print("s3 = s1 & s2: ", s3)
Kết quả sẽ như sau:
s1: {1, 2, 3, 4, 5} s2: {4, 5, 6, 7, 8}
s3 = s1 & s2: {4, 5}
Giải thích:
s1
vàs2
: được khởi tạo là hai set khác nhau.s3 = s1.intersection(s2)
: Dòng này tạo ra một set mới tên làs3
.s3
chứa các phần tử xuất hiện trong cảs1
vàs2
(tức là, phần giao của hai set).print("s3 = s1 & s2: ", s3)
: Hiển thị sets3
mới tạo. Như bạn có thể quan sát,{4, 5}
là phần giao của tậps1
và tậps2
.
Cập nhật hiệu ứng đối xứng của các phần tử trong set
Hiệu đối xứng giữa hai Set là tập hợp chứa tất cả các phần tử không chung, loại bỏ các phần tử chung. Phương thức symmetric_difference_update()
cập nhật một Set bằng hiệu đối xứng giữa Set đó và Set được truyền vào làm đối số.
Trong ví dụ dưới đây, chúng ta định nghĩa hai Set, s1 và s2. Sau đó, sử dụng phương thức symmetric_difference_update()
để thay đổi s1 sao cho s1 chứa các phần tử chỉ có trong s1 hoặc s2, nhưng không có trong cả hai Set.
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8}
print("s1:", s1, "s2:", s2)
s1.symmetric_difference_update(s2)
print("s1 sau khi thực hiện hiệu đối xứng:", s1)
Kết quả thu được như sau:
s1: {1, 2, 3, 4, 5} s2: {4, 5, 6, 7, 8}
s1 sau khi thực hiện hiệu đối xứng: {1, 2, 3, 6, 7, 8}
Giải thích:
- Chúng ta khởi tạo hai set:
s1 = {1, 2, 3, 4, 5}
vàs2 = {4, 5, 6, 7, 8}
- Ban đầu In giá trị ban đầu của
s1
vàs2
. - Câu lệnh
s1.symmetric_difference_update(s2)
: thực hiện tính toán hiệu đối xứng và cập nhật trực tiếp trêns1
. Các phần tử chung (4 và 5) bị loại bỏ. Các phần tử còn lại (1, 2, 3, 6, 7, 8) đều nằm trongs1
hoặcs2
(nhưng không phải cả hai). Kết quả làs1
được cập nhật với các phần tử này. - In ra set
s1
đã được cập nhật.
Hiệu đối xứng của các phần tử trong set
Phương thức symmetric_difference() của lớp set tương tự như phương thức symmetric_difference_update(), điểm khác biệt là symmetric_difference() trả về một set mới. set mới này chứa tất cả các phần tử từ hai set ban đầu, nhưng loại bỏ đi các phần tử chung.
Trong ví dụ sau, chúng ta khai báo hai set là s1 và s2. Sau đó, sử dụng phương thức symmetric_difference() để tạo ra một set mới s3 chứa các phần tử chỉ có trong s1 hoặc s2 (mà không có trong cả hai):
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8}
print("s1: ", s1, "s2: ", s2)
s3 = s1.symmetric_difference(s2)
print("s1 = s1 ^ s2 ", s3)
Kết quả đầu ra sẽ là:
s1: {1, 2, 3, 4, 5} s2: {4, 5, 6, 7, 8}
s1 = s1 ^ s2 {1, 2, 3, 6, 7, 8}
Giải thích:
s1
vàs2
: là hai set ban đầu.print("s1: ", s1, "s2: ", s2)
: in ra giá trị của hai set ban đầu.s3 = s1.symmetric_difference(s2)
: tạo ra một set mớis3
bằng cách lấy hiệu đối xứng củas1
vàs2
.print("s1 = s1 ^ s2 ", s3)
: hiển thị kết quả là sets3
sau khi tính hiệu đối xứng. Các phần tử 4 và 5 có trong cả hai set ban đầu nên đã bị loại khỏi kết quảs3
, còn các giá trị chỉ thuộcs1
({1, 2, 3}) vàs2
({6, 7, 8}) sẽ được giữ lại trong kết quảs3
.
Dịch vụ VPS Vietnix – Giải pháp tăng tốc website và quản lý dễ dàng
Với phần cứng hiện đại như ổ cứng SSD/NVMe Enterprise và CPU Intel Xeon, AMD, kết hợp công nghệ ảo hóa tiên tiến, dịch vụ VPS Vietnix đảm bảo hiệu suất vượt trội cho mọi nhu cầu. Tốc độ mạng lên đến 200 Mbps trong nước và 20 Mbps quốc tế giúp tối ưu kết nối. Dữ liệu được sao lưu tự động miễn phí mỗi tuần và dễ dàng khôi phục thông qua giao diện quản trị đơn giản. Bên cạnh đó, bạn có thể dễ dàng tùy chỉnh và quản lý máy chủ theo yêu cầu và quy mô dự án, cùng với các lựa chọn hệ điều hành đa dạng như Windows và Linux.
Dịch vụ VPS SSD của Vietnix mang lại hiệu suất mạnh mẽ và tốc độ vượt trội nhờ sử dụng 100% ổ cứng SSD tốc độ cao. Datacenter chuẩn Tier 3 đảm bảo bảo mật và an toàn tuyệt đối cho dữ liệu của bạn. Tốc độ mạng nhanh chóng với 200 Mbps trong nước và 20 Mbps quốc tế, giúp duy trì hoạt động ổn định cho website và ứng dụng. Dữ liệu được sao lưu tự động hàng tuần, giúp bạn an tâm về việc bảo vệ thông tin. Giao diện quản trị thân thiện cho phép bạn dễ dàng tùy chỉnh, nâng cấp và quản lý máy chủ của mình..
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 đã cùng nhau khám phá các phương pháp loại bỏ phần tử khỏi set trong Python. Từ những cách cơ bản như remove()
, discard()
, pop()
, đến việc sử dụng clear()
để xóa toàn bộ. Thêm vào đó, chúng ta còn tìm hiểu các thao tác nâng cao với set như tìm và xóa phần tử chung, phần tử riêng giữa các set.
Mọi người cũng đọc