Tài liệu

Kiểu dữ liệu Set trong Python

Huy Erick

Giới thiệu Trong các bài trước, chúng ta đã được biết đến một số container trong Python. Trong bài viết này, chúng ta sẽ tìm hiểu về một container khác, đó chính là kiểu dữ...

Giới thiệu

Trong các bài trước, chúng ta đã được biết đến một số container trong Python. Trong bài viết này, chúng ta sẽ tìm hiểu về một container khác, đó chính là kiểu dữ liệu Set trong Python.

Kiểu dữ liệu Set trong Python

Set là một container trong Python, tuy nhiên không được sử dụng nhiều như List hay Tuple. Một Set được đặc trưng bởi các yếu tố sau:

  • Được giới hạn bởi cặp ngoặc {}, tất cả những gì nằm trong đó là các phần tử của Set.
  • Các phần tử của Set được phân cách nhau bởi dấu phẩy ,.
  • Set không chứa nhiều hơn 1 phần tử trùng lặp.

Set chỉ có thể chứa các hashable object, nhưng chính nó không phải là một hashable object. Do đó, bạn không thể chứa một Set trong một Set.

Ví dụ:

set_1 = {69, 96}
set_2 = {'How Kteam'}
set_3 = {(69, 'Free Education'), (1, 2, 3)}

Cách khởi tạo Set trong Python có thể được thực hiện theo các cách sau:

Sử dụng cặp dấu ngoặc {} và đặt giá trị bên trong

Cú pháp:

{, , .., , }

Lưu ý: Khi khởi tạo bằng cách này, ít nhất phải có một giá trị.

Ví dụ:

set_ = {1, 2, 3, 4}
set_1 = {1, 1, 1} # các giá trị trùng lặp bị loại bỏ
empty_set = {} # thử khởi tạo set rỗng (Lưu ý là không phải là set)

Sử dụng Set Comprehension

set_1 = {value for value in range(3)}

Sử dụng constructor Set

Cú pháp:

set(iterable)

Công dụng: Giống hoàn toàn với việc bạn sử dụng constructor List. Khác biệt duy nhất là constructor Set sẽ tạo ra một Set.

Ví dụ:

set_1 = set((1, 2, 3))
set_2 = set('How Kteam')
set_3 = set('aaaaaaaaa')
set_4 = set([1, 6, 8, 3, 1, 1, 3, 6])
empty_set = set() # cách bạn tạo được empty set

Một số toán tử với Set trong Python

Nhằm giúp các bạn dễ hiểu hơn về các toán tử với Set trong Python, chúng ta sẽ minh hoạ các set dưới dạng biểu đồ Venn, với S1, S2 tương ứng các Set1, Set2 chứa các phần tử.

Toán tử in

Cú pháp:

value in 

Công dụng: Kết quả trả về là True nếu value xuất hiện trong Set. Ngược lại, kết quả sẽ là False.

Ví dụ:

1 in {1, 2, 3} # True
4 in {'a', 'How Kteam', 5} # False

Toán tử -

Cú pháp:

 - 

Công dụng: Kết quả trả về là một Set gồm các phần tử chỉ tồn tại trong Set1 mà không tồn tại trong Set2.

Ví dụ:

{1, 2, 3} - {2, 3} # {1}
{1, 2, 3} - {4} # {1, 2, 3}
{1, 2, 3} - {1, 2, 3} # set()
{1, 2, 3} - {1, 2, 3, 4} # set()

Toán tử &

Cú pháp:

 & 

Công dụng: Kết quả trả về là một Set chứa các phần tử vừa tồn tại trong Set1 vừa tồn tại trong Set2.

Ví dụ:

{1, 2, 3} & {4, 5} # set()
{1, 2, 3} & {1, 4, 5} # {1}
{1, 2, 3} & {1, 2, 3} # {1, 2, 3}

Toán tử |

Cú pháp:

 | 

Công dụng: Kết quả trả về là một Set chứa tất cả các phần tử tồn tại trong hai Set.

Ví dụ:

{1, 2, 3} | {1, 2, 3} # {1, 2, 3}
{1, 2, 3} | {4, 5} # {1, 2, 3, 4, 5}

Toán tử ^

Cú pháp:

 ^ 

Công dụng: Kết quả trả về là một Set chứa tất cả các phần tử chỉ tồn tại ở một trong hai Set.

Ví dụ:

{1, 2, 3} ^ {4, 5} # {1, 2, 3, 4, 5}
{1, 2, 3} ^ {1, 2, 3} # set()
{1, 2, 3} ^ {1, 4} # {2, 3, 4}

Indexing và cắt Set trong Python

Set trong Python không hỗ trợ indexing và cắt (slicing) như List hoặc Tuple. Điều này bởi vì Set không quan tâm đến vị trí của các phần tử trong Set.

Set không phải là một hash object

Set không phải là một hash object, điều này có thể được chứng minh bằng hai cách:

Thay đổi nội dung của Set

Trong ví dụ dưới đây, bạn có thể thấy rằng, dù chúng ta đã thay đổi nội dung của Set, nhưng id của Set vẫn không thay đổi.

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

Set không thể chứa một set khác

a = {1, 2}
b = {a} # Lỗi: unhashable type: 'set'

Kết luận

Bài viết này đã giới thiệu cho các bạn về kiểu dữ liệu Set trong Python. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Cảm ơn bạn đã theo dõi bài viết.

1