Python Sets

Category: Python

Tập hợp Python là một tập hợp không có thứ tự gồm nhiều mục có các kiểu dữ liệu khác nhau. Trong Python, các tập hợp có thể thay đổi , không có chỉ mục và không chứa các phần tử trùng lặp. Thứ tự các phần tử trong một tập hợp không được bảo toàn và có thể thay đổi.

Tạo một Set trong Python

Trong Python, phương pháp cơ bản và hiệu quả nhất để tạo tập hợp là sử dụng dấu ngoặc nhọn.

Ví dụ:

set1 = {1, 2, 3, 4}
print(set1)

Đầu ra:

{1, 2, 3, 4}

Sử dụng hàm set()

Bộ Python có thể được tạo bằng cách sử dụng hàm set () tích hợp với một đối tượng có thể lặp lại hoặc một chuỗi bằng cách đặt chuỗi bên trong dấu ngoặc nhọn, phân tách bằng dấu 'phẩy'.

Lưu ý: Một tập hợp Python không thể có các phần tử có thể thay đổi như danh sách hoặc từ điển vì nó không thể thay đổi. 

Ví dụ:

set1 = set()
print(set1)

set1 = set("GeeksForGeeks")
print(set1)

# Tạo một Set bằng cách sử dụng List
set1 = set(["Geeks", "For", "Geeks"])
print(set1)

# Tạo một Set bằng cách sử dụng một tuple
tup = ("Geeks", "for", "Geeks")
print(set(tup))

# Tạo một Set bằng cách sử dụng một từ điển
d = {"Geeks": 1, "for": 2, "Geeks": 3}
print(set(d))

Đầu ra:

set()
{'e', 'r', 'o', 'k', 'G', 's', 'F'}
{'For', 'Geeks'}
{'for', 'Geeks'}
{'for', 'Geeks'}

Không có thứ tự, không có chỉ mục và khả năng thay đổi

Trong tập hợp, thứ tự các phần tử không được đảm bảo giống với thứ tự mà chúng được thêm vào. Đầu ra có thể thay đổi mỗi lần chúng ta chạy chương trình. Ngoài ra, các mục trùng lặp được nhập vào sẽ tự động bị xóa.

Các tập hợp không hỗ trợ lập chỉ mục. Cố gắng truy cập một phần tử theo chỉ mục (set[0]) sẽ gây ra lỗi TypeError .

Chúng ta có thể thêm các phần tử vào tập hợp bằng cách sử dụng add() . Chúng ta có thể xóa các phần tử khỏi tập hợp bằng cách sử dụng remove() . Tập hợp thay đổi sau các thao tác này, chứng minh tính có thể thay đổi của nó. Tuy nhiên, chúng ta không thể thay đổi trực tiếp các mục của nó.

Ví dụ:

set1 = {3, 1, 4, 1, 5, 9, 2}

print(set1)  # Đầu ra có thể thay đổi: {1, 2, 3, 4, 5, 9}

# Không có chỉ mục: Không thể truy cập các phần tử theo chỉ mục
# Điều này sẽ gây ra lỗi TypeError
try:
    print(set1[0])
except TypeError as e:
    print(e)

Đầu ra:

{1, 2, 3, 4, 5, 9}
'set' object is not subscriptable

Thêm phần tử vào một Set trong Python

Chúng ta có thể thêm các mục vào một tập hợp bằng phương thức add()phương thức update() . Phương thức add() có thể được sử dụng để chỉ thêm một mục duy nhất. Để thêm nhiều mục, chúng ta sử dụng phương thức update().

Ví dụ:

# Tạo 1 tập hợp
set1 = {1, 2, 3}

# thêm 1 mục
set1.add(4)

# thêm nhiều mục
set1.update([5, 6])

print(set1)

Đầu ra:

{1, 2, 3, 4, 5, 6}

Truy cập một Set trong Python

Chúng ta có thể lặp qua một tập hợp để truy cập các mục tập hợp vì tập hợp không được lập chỉ mục và không hỗ trợ truy cập các phần tử bằng cách lập chỉ mục. Chúng ta cũng có thể sử dụng từ khóa in là toán tử thành viên để kiểm tra xem một mục có tồn tại trong một tập hợp hay không.

Ví dụ:

set1 = set(["Geeks", "For", "Geeks."])

# Truy cập phần tử bằng vòng lặp For
for i in set1:
    print(i, end=" ")

# Kiểm tra phần tử # sử dụng từ khóa in
print("Geeks" in set1)

Đầu ra:

Geeks For Geeks. True

Giải thích:

  • Vòng lặp này sẽ in từng mục trong tập hợp. Vì các tập hợp không được sắp xếp theo thứ tự nên thứ tự các mục được in không được đảm bảo.

  • Đoạn mã này kiểm tra xem số 4 có nằm trong set1 hay không và in ra thông báo tương ứng.

Xóa các phần tử khỏi Set trong Python

Chúng ta có thể xóa một phần tử khỏi một tập hợp trong Python bằng một số phương thức: remove(), discard() và pop(). Mỗi phương thức hoạt động hơi khác nhau:

  • Sử dụng phương thức remove() hoặc phương thức discard()

  • Sử dụng phương thức pop()

  • Sử dụng phương thức clear()

Sử dụng phương thức remove() hoặc phương thức discard()

Phương thức remove() xóa một phần tử đã chỉ định khỏi tập hợp. Nếu phần tử không có trong tập hợp, nó sẽ đưa ra lỗi KeyError. Phương thức discard() cũng xóa một phần tử đã chỉ định khỏi tập hợp. Không giống như remove(), nếu phần tử không được tìm thấy, nó sẽ không đưa ra lỗi.

# Sử dụng phương thức remove
set1 = {1, 2, 3, 4, 5}
set1.remove(3)  # Xóa phần tử 3 khỏi tập hợp
print(set1)     # Kết quả: {1, 2, 4, 5}

# Cố gắng xóa một phần tử không tồn tại
try:
    set1.remove(10)  # Gây lỗi vì 10 không có trong tập hợp
except KeyError as e:
    print("Lỗi:", e)  # In ra thông báo lỗi

# Sử dụng phương thức discard()
set1.discard(4)  # Loại bỏ phần tử 4 khỏi tập hợp (nếu có)
print(set1)      # Kết quả: {1, 2, 5}

# Cố gắng loại bỏ một phần tử không tồn tại
set1.discard(10)  # Không có lỗi xảy ra nếu phần tử không tồn tại
print(set1)       # Kết quả vẫn là {1, 2, 5}

Đầu ra:

{1, 2, 4, 5}
Error: 10
{1, 2, 5}
{1, 2, 5}

Sử dụng phương thức pop()

Phương thức pop() xóa và trả về một phần tử tùy ý khỏi tập hợp. Điều này có nghĩa là chúng ta không biết phần tử nào sẽ bị xóa. Nếu tập hợp rỗng, nó sẽ tạo ra lỗi KeyError.

Lưu ý: Nếu tập hợp không có thứ tự thì không có cách nào để xác định phần tử nào được lấy ra bằng cách sử dụng hàm pop(). 

set1 = {1, 2, 3, 4, 5}
val = set1.pop()
print(val)
print(set1)

# Sử dụng pop trên một tập rỗng
set1.clear()  # Xóa tập hợp để làm cho nó trống rỗng
try:
    set1.pop()
except KeyError as e:
    print("Error:", e)

Đầu ra:

1
{2, 3, 4, 5}
Error: 'pop from an empty set'

Sử dụng phương thức clear()

Phương thức clear() xóa tất cả các phần tử khỏi tập hợp, để lại tập hợp trống.

set1 = {1, 2, 3, 4, 5}
set1.clear()
print(set1)

Đầu ra

set()

Frozenset trong Python

Frozenset trong Python là một kiểu dữ liệu tích hợp tương tự như một tập hợp nhưng có một điểm khác biệt chính là tính bất biến . Điều này có nghĩa là sau khi một frozenset được tạo ra, chúng ta không thể sửa đổi các phần tử của nó, tức là chúng ta không thể thêm, xóa hoặc thay đổi bất kỳ mục nào trong đó. Giống như các tập hợp thông thường, frozenset không thể chứa các phần tử trùng lặp.

Nếu không có tham số nào được truyền vào, nó sẽ trả về một frozenset rỗng.  

# Tạo frozenset từ danh sách
fset = frozenset([1, 2, 3, 4, 5])
print(fset)  

# Tạo một frozenset từ một tập hợp
set1 = {3, 1, 4, 1, 5}
fset = frozenset(set1)
print(fset)

Đầu ra:

frozenset({1, 2, 3, 4, 5})
frozenset({1, 3, 4, 5})

Ép kiểu đối tượng thành tập hợp

Chuyển kiểu đối tượng thành tập hợp trong Python đề cập đến việc chuyển đổi nhiều kiểu dữ liệu thành một tập hợp. Python cung cấp hàm tạo set() để thực hiện việc chuyển kiểu này, cho phép chúng ta chuyển đổi danh sách, bộ và chuỗi thành tập hợp.

# Ép kiểu danh sách thành tập hợp
li = [1, 2, 3, 3, 4, 5, 5, 6, 2]
set1 = set(li)
print(set1)

# Ép kiểu chuỗi thành tập hợp
s = "GeeksforGeeks"
set1 = set(s)
print(set1)

# Ép kiểu từ điển thành tập hợp
d = {1: "One", 2: "Two", 3: "Three"}
set1 = set(d)
print(set1)

Đầu ra:

{1, 2, 3, 4, 5, 6}
{'f', 'G', 's', 'k', 'r', 'e', 'o'}
{1, 2, 3}

Ưu điểm của Set trong Python

  • Các phần tử duy nhất : Tập hợp chỉ có thể chứa các phần tử duy nhất, do đó chúng có thể hữu ích để loại bỏ các phần tử trùng lặp khỏi bộ sưu tập dữ liệu.

  • Kiểm tra tư cách thành viên nhanh : Các tập hợp được tối ưu hóa để kiểm tra tư cách thành viên nhanh, do đó chúng có thể hữu ích trong việc xác định xem một giá trị có nằm trong một tập hợp hay không.

  • Các phép toán tập hợp: Tập hợp hỗ trợ các phép toán tập hợp như hợp, giao và hiệu, có thể hữu ích khi làm việc với tập dữ liệu.

  • Có thể thay đổi : Tập hợp có thể thay đổi, nghĩa là bạn có thể thêm hoặc xóa các phần tử khỏi tập hợp sau khi tập hợp được tạo.

Nhược điểm của Sets trong Python

  • Không có thứ tự : Các tập hợp không có thứ tự, nghĩa là bạn không thể dựa vào thứ tự của dữ liệu trong tập hợp. Điều này có thể gây khó khăn cho việc truy cập hoặc xử lý dữ liệu theo thứ tự cụ thể.

  • Chức năng hạn chế: So với danh sách, tập hợp có chức năng hạn chế vì chúng không hỗ trợ các phương thức như append() hoặc pop(). Điều này có thể khiến việc sửa đổi hoặc thao tác dữ liệu được lưu trữ trong tập hợp trở nên khó khăn hơn.

  • Sử dụng bộ nhớ: Các tập hợp có thể tiêu tốn nhiều bộ nhớ hơn danh sách, đặc biệt là đối với các tập dữ liệu nhỏ. Điều này là do mỗi phần tử trong một tập hợp yêu cầu thêm bộ nhớ để lưu trữ giá trị băm.

  • Ít được sử dụng hơn: Các tập hợp ít được sử dụng hơn các danh sách và từ điển trong Python, điều đó có nghĩa là có thể có ít tài nguyên hoặc thư viện hơn để làm việc với chúng. Điều này có thể khiến việc tìm giải pháp cho các vấn đề hoặc nhận trợ giúp gỡ lỗi trở nên khó khăn hơn.

Nhìn chung, tập hợp có thể là một cấu trúc dữ liệu hữu ích trong Python, đặc biệt là để loại bỏ các bản sao hoặc để kiểm tra thành viên nhanh. Tuy nhiên, việc thiếu thứ tự và chức năng hạn chế của chúng cũng có thể khiến chúng kém linh hoạt hơn danh sách hoặc từ điển, vì vậy điều quan trọng là phải cân nhắc cẩn thận những ưu điểm và nhược điểm của việc sử dụng tập hợp khi quyết định sử dụng cấu trúc dữ liệu nào trong chương trình Python của bạn.

Phương thức của set trong Python

Chức năng

Sự miêu tả

add()

Thêm một phần tử vào một tập hợp

remove()

Xóa một phần tử khỏi một tập hợp. Nếu phần tử không có trong tập hợp, hãy đưa ra một KeyError

clear()

Xóa tất cả các phần tử khỏi một tập hợp

copy()

Trả về một bản sao nông của một tập hợp

pop()

Xóa và trả về một phần tử tập hợp tùy ý. Nâng KeyError nếu tập hợp rỗng

update()

Cập nhật một tập hợp bằng cách kết hợp chính nó và các tập hợp khác

union()

Trả về hợp của các tập hợp trong một tập hợp mới

difference()

Trả về hiệu số của hai hoặc nhiều tập hợp dưới dạng một tập hợp mới

difference_update()

Xóa tất cả các phần tử của tập hợp khác khỏi tập hợp này

discard()

Xóa một phần tử khỏi tập hợp nếu nó là thành viên. (Không làm gì nếu phần tử không có trong tập hợp)

intersection()

Trả về giao điểm của hai tập hợp dưới dạng một tập hợp mới

intersection_update()

Cập nhật tập hợp với giao điểm của chính nó và một tập hợp khác

isdisjoint()

Trả về True nếu hai tập hợp có giao điểm null

issubset()

Trả về True nếu tập hợp khác chứa tập hợp này

issuperset()

Trả về True nếu tập hợp này chứa một tập hợp khác

symmetric_difference()

Trả về sự khác biệt đối xứng của hai tập hợp dưới dạng một tập hợp mới

symmetric_difference_update()

Cập nhật một tập hợp với sự khác biệt đối xứng của chính nó và một tập hợp khác

Published on Jun 18, 2025