HomeLập trìnhPythonBộ Python –...

Bộ Python – Hoạt động và ví dụ


Nếu bạn là người mới bắt đầu học Python, rất có thể bạn đã bắt gặp các danh sách. Nhưng bạn đã nghe nói về bộ trong Python chưa?

Trong hướng dẫn này, chúng ta sẽ khám phá bộ là gì, cách tạo chúng và các thao tác khác nhau mà bạn có thể sử dụng trên chúng.

Trong Python, các tập hợp giống hệt như các danh sách ngoại trừ thực tế là các phần tử của chúng là bất biến (điều đó có nghĩa là bạn không thể thay đổi/biến đổi một phần tử của tập hợp sau khi đã khai báo). Tuy nhiên, bạn có thể thêm/xóa các phần tử khỏi tập hợp.

Nếu điều đó gây nhầm lẫn, hãy để tôi thử và tóm tắt:

Một tập hợp là một nhóm các phần tử có thể thay đổi, không có thứ tự, trong đó bản thân các phần tử là bất biến.

Một đặc điểm khác của một tập hợp là nó có thể bao gồm các phần tử thuộc các kiểu khác nhau. Điều này có nghĩa là bạn có thể có một nhóm số, chuỗi và thậm chí cả bộ, tất cả trong cùng một bộ!

Cách phổ biến nhất để tạo một bộ trong Python là sử dụng công cụ tích hợp sẵn set() chức năng.

>>> first_set = set(("Connor", 32, (1, 2, 3)))
>>> first_set
{32, 'Connor', (1, 2, 3)}
>>> 
>>> second_set = set("Connor")
>>> second_set
{'n', 'C', 'r', 'o'}

Bạn cũng có thể tạo các bộ bằng cách sử dụng dấu ngoặc nhọn {} cú pháp:

>>> third_set = {"Apples", ("Bananas", "Oranges")}
>>> type(third_set)
<class 'set'>

Các set() chức năng mất trong một lặp đi lặp lại và đưa ra một danh sách các đối tượng sẽ được chèn vào tập hợp. Các {} cú pháp tự đặt các đối tượng vào tập hợp.

Như bạn có thể đã nhận ra, cho dù bạn sử dụng set() chức năng hoặc {} để tạo một tập hợp, mỗi phần tử cần phải là một đối tượng bất biến. Vì vậy, nếu bạn thêm một danh sách (là một đối tượng có thể thay đổi) vào một tập hợp, bạn sẽ gặp lỗi:

>>> incorrect_set = {"Apples", ["Bananas", "Oranges"]}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

Chúng ta đã biết rằng các tập hợp có thể thay đổi. Điều này có nghĩa là bạn có thể thêm/bớt các phần tử trong một tập hợp.

Đọc thêm  Python Slicing – Cách cắt một mảng và tác dụng của nó [::-1] Bần tiện?

Đây là một ví dụ về việc thêm các phần tử vào một tập hợp bằng cách sử dụng update() chức năng.

>>> add_set = set((1, 2, 3, 4))
>>> add_set
{1, 2, 3, 4}
>>>
>>> add_set.update((1,))
>>> add_set
{1, 2, 3, 4}
>>> add_set.update(("cello", "violin"))
>>> add_set
{1, 2, 3, 4, 'violin', 'cello'}

Nhưng hãy lưu ý rằng không có gì thay đổi khi chúng tôi cố gắng thêm lại “cello” vào bộ:

>>> add_set.update(("cello",))
>>> add_Set
{1, 2, 3, 4, 'violin', 'cello'}

Điều này là do các bộ trong Python không thể chứa các bản sao. Vì vậy, khi chúng tôi cố gắng thêm "cello" lại tập hợp, Python nhận ra rằng chúng tôi đang cố gắng thêm một phần tử trùng lặp và không cập nhật tập hợp. Đây là một lưu ý giúp phân biệt tập hợp với danh sách.

Đây là cách bạn xóa các phần tử khỏi một tập hợp:

>>> sub_set = add_set
>>> sub_set.remove("violin")
>>> sub_set
{1, 2, 3, 4, 'cello'}

Các remove(x) hàm loại bỏ phần tử x từ một tập hợp. Nó trả về một KeyError nếu x không phải là một phần của tập hợp:

>>> sub_set.remove("guitar")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'guitar'

Có một số cách khác để xóa (các) phần tử khỏi tập hợp:

  • các discard(x) phương pháp loại bỏ x từ bộ, nhưng không đưa ra bất kỳ lỗi nào nếu x không có mặt trong tập hợp.
  • các pop() phương thức loại bỏ và trả về một phần tử ngẫu nhiên từ tập hợp.
  • các clear() phương thức xóa tất cả các phần tử khỏi một tập hợp

Dưới đây là một số ví dụ để minh họa:

>>> m_set = set((1, 2, 3, 4))
>>> 
>>> m_set.discard(5) # no error raised even though '5' is not present in the set
>>>
>>> m_set.pop()
4
>>> m_set
{1, 2, 3}
>>>
>>> m_set.clear()
>>> m_set
set()

Nếu bạn còn nhớ môn toán cơ bản ở trường trung học, có lẽ bạn sẽ nhớ lại các phép toán tập hợp toán học như liên hiệp, ngã tư, Sự khác biệtchênh lệch đối xứng. Chà, bạn có thể đạt được điều tương tự với các bộ Python.

1. Đặt liên minh

Hợp của hai tập hợp là tập hợp tất cả các yếu tố của cả hai bộ mà không có bản sao. Bạn có thể dùng union() phương pháp hoặc | cú pháp để tìm sự kết hợp của một bộ Python.

>>> first_set = {1, 2, 3}
>>> second_set = {3, 4, 5}
>>> first_set.union(second_set)
{1, 2, 3, 4, 5}
>>>
>>> first_set | second_set     # using the `|` operator
{1, 2, 3, 4, 5}

2. Đặt giao lộ

Giao của hai tập hợp là tập hợp tất cả các yếu tố phổ biến của cả hai tập hợp. Bạn có thể dùng intersection() phương pháp của & toán tử để tìm giao điểm của một tập hợp Python.

>>> first_set = {1, 2, 3, 4, 5, 6}
>>> second_set = {4, 5, 6, 7, 8, 9}
>>> first_set.intersection(second_set)
{4, 5, 6}
>>>
>>> first_set & second_set     # using the `&` operator
{4, 5, 6}

3. Đặt sự khác biệt

Hiệu của hai tập hợp là tập hợp có tất cả các phần tử của tập hợp thứ nhất không có mặt trong tập thứ hai. Bạn sẽ sử dụng difference() phương pháp hoặc - toán tử để đạt được điều này trong Python.

>>> first_set = {1, 2, 3, 4, 5, 6}
>>> second_set = {4, 5, 6, 7, 8, 9}
>>> first_set.difference(second_set)
{1, 2, 3}
>>>
>>> first_set - second_set     # using the `-` operator
{1, 2, 3}
>>>
>>> second_set - first_set
{8, 9, 7}

4. Đặt chênh lệch đối xứng

Hiệu đối xứng giữa hai tập hợp là tập hợp gồm tất cả các phần tử hoặc trong bộ đầu tiên hoặc bộ thứ hai nhưng không phải trong cả hai.

Bạn có quyền lựa chọn sử dụng một trong hai symmetric_difference() phương pháp hoặc ^ toán tử để làm điều này trong Python.

>>> first_set = {1, 2, 3, 4, 5, 6}
>>> second_set = {4, 5, 6, 7, 8, 9}
>>> first_set.symmetric_difference(second_set)
{1, 2, 3, 7, 8, 9}
>>>
>>> first_set ^ second_set     # using the `^` operator
{1, 2, 3, 7, 8, 9}

Mỗi set() các hoạt động mà chúng ta đã thảo luận ở trên có thể được sử dụng để biến đổi một bộ Python hiện có. Tương tự như cách bạn sẽ sử dụng cú pháp gán tăng cường, chẳng hạn như += hoặc *= để cập nhật một biến, bạn có thể làm tương tự cho các bộ:

>>> a = {1, 2, 3, 4, 5, 6}
>>> b = {4, 5, 6, 7, 8, 9}
>>>
>>> a.update(b)          # a "union" operation
>>> a
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>>
>>> a &= b               # the "intersection" operation
>>> a
{4, 5, 6, 7, 8, 9}
>>>
>>> a -= set((7, 8, 9))  # the "difference" operation
>>> a
{4, 5, 6}
>>>
>>> a ^= b               # the "symmetric difference" operation
>>> a
{7, 8, 9}

Đây không phải là quá phổ biến, nhưng chúng rất hữu ích trong việc xem cách các tập hợp liên quan đến những người khác.

  • các a.issubset(b) phương pháp hoặc <= toán tử trả về true nếu a là một tập hợp con của b
  • các a.issuperset(b) phương pháp hoặc >= toán tử trả về true nếu a là một bộ siêu tập của b
  • các a.isdisjoint(b) phương thức trả về true nếu có không có phần tử chung giữa các bộ ab

Vì các bộ có thể thay đổi nên chúng không thể băm được – nghĩa là bạn không thể sử dụng chúng làm khóa từ điển.

Đọc thêm  Dòng mới của Python và cách in Python mà không cần dòng mới

Python cho phép bạn giải quyết vấn đề này bằng cách sử dụng một frozenset thay thế. Cái này có tất cả các thuộc tính của một tập hợp, ngoại trừ việc nó là bất biến (điều này có nghĩa là bạn không thể thêm/xóa các phần tử khỏi Frozenset). Nó cũng có thể băm được, vì vậy nó có thể được sử dụng làm chìa khóa cho từ điển.

Các frozenset kiểu dữ liệu có tất cả các phương thức của một tập hợp (chẳng hạn như difference(), symmetric_differenceunion) nhưng vì nó là bất biến nên nó không có phương thức để thêm/xóa phần tử.

>>> a = frozenset((1, 2, 3, 4))
>>> b = frozenset((3, 4, 5, 6))
>>>
>>> a.issubset(b)
False
>>> a.update(b)    # raises an error
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'update'

Và sử dụng frozensets như các khóa từ điển đơn giản như 1, 2, 3:

>>> a = frozenset((1, 2, 3, 4))
>>> b = frozenset(("w", "x", "y", "z"))
>>>
>>> d = {a: "hello", b: "world"}
>>> d
{frozenset({1, 2, 3, 4}): 'hello', frozenset({'w', 'x', 'y', 'z'}): 'world'}

Đó là nó! Bạn đã tìm hiểu về tập hợp là gì, cách tạo và làm việc với chúng cũng như các thao tác khác nhau mà bạn có thể sử dụng trên chúng.

Với các bộ đã hoàn thành, giờ đây bạn sẽ cảm thấy thoải mái với hầu hết các hàm tích hợp sẵn của Python. Tất cả những gì bạn cần làm bây giờ là luyện tập. Chúc may mắn!

Chắc chắn rằng theo dõi tôi trên Twitter để biết thêm thông tin cập nhật. Có một cái tốt đẹp!

Đọc thêm  strftime – Chuỗi dấu thời gian DateTime của Python





Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status