Tin tức và phân tích của tất cả các thiết bị di động

Hướng dẫn đầy đủ với các ví dụ về mã

Trong hướng dẫn này, bạn sẽ tìm hiểu kiến ​​thức cơ bản về hợp ngữ Python và các phương pháp hợp ngữ khác nhau mà bạn có thể sử dụng để sửa đổi hợp ngữ Python.

Bộ là một trong những cấu trúc dữ liệu tích hợp trong Python. Khi bạn cần làm việc với một tập hợp các phần tử duy nhất, bạn sẽ sử dụng một tập hợp làm cấu trúc dữ liệu để duyệt qua.

Trong một số phần tiếp theo, chúng ta sẽ đề cập đến kiến ​​thức cơ bản về hợp ngữ của Python và các phương thức hợp ngữ mà bạn có thể sử dụng để làm việc với chúng. Tiếp theo, chúng ta sẽ học cách thực hiện các thao tác thiết lập phổ biến trong Python.

Hãy bắt đầu!

Khái niệm cơ bản về tập hợp python

Trong Python, một tập hợp là một tập hợp các phần tử duy nhất không có thứ tự. Điều này có nghĩa là tất cả các mục trong bộ phải khác nhau.

Bạn có thể thêm và xóa các phần tử khỏi tập hợp; do đó, một bộ là một bộ sưu tập có thể thay đổi. Nó có thể chứa các phần tử của các loại dữ liệu khác nhau. Tuy nhiên, các mục riêng lẻ trong bộ phải có thể băm được.

Trong Python, một đối tượng được cho là có thể băm nếu giá trị băm của nó không bao giờ thay đổi. Hầu hết các đối tượng bất biến như chuỗi, bộ dữ liệu và từ điển Python đều có thể được băm.

Chúng ta sẽ tìm hiểu chi tiết về việc tạo các tập hợp. Hiện tại, hãy xem xét hai bộ công cụ sau:

py_set = {0,1,2,(2,3,4),'Cool!'}
py_set = {0,1,2,[2,3,4],'Oops!'}

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-40-2d3716c7fe01> in <module>()
----> 1 py_set = {0,1,2,[2,3,4],'Oops!'}

TypeError: unhashable type: 'list'

Bộ đầu tiên chứa ba số, một bộ và một chuỗi. Quá trình khởi tạo tập hợp diễn ra không có lỗi. Mặt khác, tập thứ hai chứa một danh sách thay vì một bộ. Danh sách này là một tập hợp có thể thay đổi, không thể được băm và quá trình khởi tạo sẽ tạo ra TypeError.

📑 Tổng hợp tất cả lại với nhau, chúng ta có thể định nghĩa một bộ Python là một tập hợp các phần tử riêng biệt và có thể băm có thể thay đổi được.

Cách tạo một tập hợp python

Chúng ta sẽ bắt đầu bằng cách học cách tạo một assembly trong Python.

#1. Sử dụng khởi tạo rõ ràng

Bạn có thể tạo một tập hợp trong Python bằng cách chỉ định các phần tử của tập hợp, được phân tách bằng dấu phẩy (,) và được đặt trong một cặp dấu ngoặc nhọn {}.

py_set1 = {'Python','C','C++','JavaScript'}
type(py_set1)

# Output
set

Nếu bạn đã từng làm việc với danh sách Python trước đây, bạn sẽ biết rằng [] khởi tạo một danh sách trống. Mặc dù một tập hợp python được đặt trong một cặp dấu ngoặc nhọn {}, bạn không thể sử dụng một cặp {} để khởi tạo một tập hợp. Điều này là do {} khởi tạo từ điển python, không phải cụm python.

py_set2 = {}
type(py_set2)

# Output
dict

Bạn có thể gọi lại type() để kiểm tra xem py_set có phải là từ điển (dict) không.

#2. Sử dụng bộ()

Nếu bạn muốn khởi tạo một tập hợp trống và sau đó thêm các phần tử vào đó, bạn có thể làm như vậy với hàm set().

py_set3 = set()
type(py_set3)

# Output
set

#3. Truyền các lần lặp khác vào tập hợp

Một cách khác để tạo các bộ là truyền các khả năng lặp khác, chẳng hạn như danh sách và bộ, thành các bộ bằng cách sử dụng set(iterable).

py_list = ['Python','C','C++','JavaScript','C']
py_set4 = set(py_list)
print(py_set4)
# {'C++', 'C', 'JavaScript', 'Python'} # repeating element 'C' removed
type(py_set4)
# set

Trong ví dụ trên, py_list chứa ‘C’ hai lần. Nhưng trong py_set4, ‘C’ chỉ xuất hiện một lần vì tập hợp là tập hợp các phần tử riêng biệt. Kỹ thuật cast-to-set này thường được sử dụng để loại bỏ các bản sao khỏi danh sách Python.

Cách thêm các mục vào bộ python

Hãy bắt đầu bằng cách tạo một py_set trống và làm việc với nó cho đến hết hướng dẫn này.

py_set = set()
len(py_set) # returns the length of a set
# Output
0

#1. Sử dụng phương thức .add()

Bạn có thể sử dụng phương thức .add() để thêm các mục vào một tập hợp. set.add(item) thêm một mục vào tập hợp.

Để rõ ràng, chúng tôi sẽ thêm các mục vào cụm python và in cụm ở mỗi bước.

▶️ Hãy thêm ‘Python’ làm thành phần cho py_set.

py_set.add('Python')
print(py_set)

# Output
{'Python'}

Sau đó, chúng tôi sẽ thêm một mục khác.

py_set.add('C++')
print(py_set)

# Output
{'Python', 'C++'}

Điều quan trọng là phải hiểu rằng phương thức .add() chỉ thêm một mục vào tập hợp nếu mục đó chưa có. Nếu tập hợp đã chứa mục bạn muốn thêm, thao tác thêm sẽ không có hiệu lực.

Để kiểm tra điều này, hãy thử thêm ‘C++’ vào py_set.

py_set.add('C++')
print(py_set)

# Output
{'Python', 'C++'}

Tập hợp chứa ‘C++’, vì vậy thao tác bổ sung không có hiệu lực.

▶️ Hãy thêm một vài yếu tố nữa vào bộ.

py_set.add('C')
print(py_set)
py_set.add('JavaScript')
print(py_set)
py_set.add('Rust')
print(py_set)

# Output
{'Python', 'C++', 'C'}
{'JavaScript', 'Python', 'C++', 'C'}
{'Rust', 'JavaScript', 'Python', 'C++', 'C'}

#2. Sử dụng phương thức .update()

Cho đến giờ chúng ta đã biết cách thêm các phần tử vào một tập hợp hiện có – mỗi lần một phần tử.

Nếu bạn muốn thêm nhiều mục vào một chuỗi các mục thì sao?

Bạn có thể làm điều này bằng cách sử dụng phương thức .update() với cú pháp: set.update(collection) để thêm các mục từ bộ sưu tập vào bộ. Một bộ sưu tập có thể là một danh sách, bộ dữ liệu, từ điển, v.v.

py_set.update(['Julia','Ruby','Scala','Java'])
print(py_set)

# Output
{'C', 'C++', 'Java', 'JavaScript', 'Julia', 'Python', 'Ruby', 'Rust', 'Scala'}

Phương pháp này hữu ích khi bạn muốn thêm một tập hợp các mục vào một tập hợp mà không tạo một đối tượng khác trong bộ nhớ.

Trong phần tiếp theo, hãy tìm hiểu cách xóa các mục khỏi một tập hợp.

Làm cách nào để xóa các mục khỏi bộ python?

Hãy xem xét tập hợp sau (py_set trước thao tác cập nhật).

py_set = {'C++', 'JavaScript', 'Python', 'Rust', 'C'}

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

set.pop() xóa ngẫu nhiên một phần tử khỏi tập hợp và trả về phần tử đó. Hãy gọi phương thức pop trên py_set và xem nó trả về kết quả gì.

py_set.pop()

# Output
'Rust'

Lần này, lệnh gọi phương thức .pop() trả về chuỗi ‘Rust’.

Lưu ý: Vì phương thức .pop() trả về một mục ngẫu nhiên khi bạn chạy mã ở cuối, nên bạn cũng có thể nhận được một mục khác.

Khi chúng tôi xem phim trường, “Rust” không còn trong phim trường nữa.

print(py_set)

# Output
{'JavaScript', 'Python', 'C++', 'C'}

#2. Sử dụng các phương thức .remove() và remove()

Trong thực tế, bạn có thể muốn xóa các phần tử cụ thể khỏi tập hợp. Bạn có thể sử dụng các phương thức .remove() và .discard() cho việc này.

set.remove(element) loại bỏ các phần tử khỏi tập hợp.

py_set.remove('C')
print(py_set)

# Output
{'JavaScript', 'Python', 'C++'}

Nếu chúng ta cố gắng loại bỏ một phần tử không có trong tập hợp, chúng ta sẽ gặp lỗi KeyError.

py_set.remove('Scala')

# Output
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-58-a1abab3a8892> in <module>()
----> 1 py_set.remove('Scala')

KeyError: 'Scala'

Hãy xem xét lại py_set. Bây giờ chúng ta có ba yếu tố.

print(py_set)

# Output
{'JavaScript', 'Python', 'C++'}

Sử dụng cú pháp set.discard(element), phương thức .discard() cũng loại bỏ các phần tử khỏi tập hợp.

py_set.discard('C++')
print(py_set)

# Output
{'JavaScript', 'Python'}

Tuy nhiên, nó khác với phương thức .remove() ở chỗ nó không đưa ra lỗi KeyError khi chúng ta cố xóa một mục không tồn tại.

Nếu chúng tôi cố xóa “Scala” (không tồn tại) khỏi danh sách bằng phương thức .discard(), chúng tôi sẽ không thấy lỗi.

py_set.discard('Scala') #no error!
print(py_set)

# Output
{'JavaScript', 'Python'}

Cách truy cập các mục lắp ráp python

Cho đến giờ, chúng ta đã học cách thêm và xóa các mục khỏi bộ Python. Tuy nhiên, chúng tôi vẫn chưa thấy cách truy cập các mục riêng lẻ trong bộ.

Bởi vì một bộ là một bộ sưu tập không có thứ tự, nó không thể được lập chỉ mục. Do đó, nếu bạn cố gắng truy cập các phần tử của tập hợp theo chỉ mục, bạn sẽ gặp lỗi như được hiển thị.

py_set = {'C++', 'JavaScript', 'Python', 'Rust', 'C'}

print(py_set[0])

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-27-0329274f4580> in <module>()
----> 1 print(py_set[0])

TypeError: 'set' object is not subscriptable

Vì vậy, làm thế nào để bạn truy cập các mục trong bộ?

Điều này có thể được thực hiện theo hai cách:

  • Đi qua bộ và truy cập từng mục
  • Kiểm tra xem một mục có thuộc một tập hợp không

▶️ Lặp qua tập hợp và truy cập các phần tử bằng vòng lặp for.

for elt in py_set:
  print(elt)

# Output
C++
JavaScript
Python
Rust
C

Trong thực tế, bạn có thể muốn kiểm tra xem một mục có trong tập hợp hay không bằng cách sử dụng toán tử in.

Lưu ý: một mục trong tập hợp trả về True nếu mục đó có trong tập hợp; nếu không nó trả về Sai.

Trong ví dụ này, py_set chứa ‘C++’ và không chứa ‘Julia’, đồng thời toán tử in trả về True và False tương ứng.

'C++' in py_set
# True
'Julia' in py_set
# False

Làm cách nào để tìm độ dài bộ python?

Như đã trình bày trước đó, bạn có thể sử dụng hàm len() để lấy số phần tử có trong một tập hợp.

py_set = {'C++', 'JavaScript', 'Python', 'Rust', 'C'}
len(py_set)

# Output: 5

Làm thế nào để làm sạch lắp ráp python

Để xóa một tập hợp bằng cách xóa tất cả các phần tử, bạn có thể sử dụng phương thức .clear().

Hãy gọi phương thức .clear() trên py_set.

py_set.clear()

Nếu bạn cố in nó, bạn sẽ nhận được set() – cho biết rằng set trống. Bạn cũng có thể gọi len() để kiểm tra xem độ dài của tập hợp có bằng không hay không.

print(py_set)
# set()
print(len(py_set))
# 0

Cho đến nay, chúng ta đã học cách thực hiện các thao tác CRUD cơ bản trên các bộ sưu tập Python:

  • Sáng tạo: sử dụng set(), typecasting và khởi tạo
  • Đọc: Truy cập các thành viên lắp ráp bằng vòng lặp và toán tử để kiểm tra thành viên
  • Cập nhật: thêm, xóa các mục khỏi bộ và cập nhật bộ
  • Xóa: Xóa bộ bằng cách xóa tất cả các mục khỏi nó

Các hoạt động thiết lập phổ biến được giải thích bằng mã Python

Các tập hợp Python cũng cho phép chúng ta thực hiện các thao tác tập hợp cơ bản. Chúng ta sẽ tìm hiểu về chúng trong phần này.

#1. Liên minh các bộ sưu tập trong python

Trong lý thuyết tập hợp, hợp của hai tập hợp là tập hợp có tất cả các phần tử thuộc ít nhất một trong hai tập hợp đó. Nếu có hai tập hợp A và B thì tổ hợp đó chứa các phần tử chỉ có trong A, chỉ B và các phần tử có trong cả A và B.

Để tìm tổng của các tập hợp, bạn có thể sử dụng | toán tử hoặc phương thức .union() với cú pháp: setA.union(setB).

setA = {1,3,5,7,9}
setB = {2,4,6,8,9}

print(setA | setB)
# Output
{1, 2, 3, 4, 5, 6, 7, 8, 9}

setA.union(setB)

# Output
{1, 2, 3, 4, 5, 6, 7, 8, 9}

Tập hợp là một phép toán giao hoán; vì vậy AUB giống như BU A. Hãy xác minh điều này bằng cách hoán đổi vị trí của setA và setB trong lệnh gọi phương thức .union().

setB.union(setA)

# Output
{1, 2, 3, 4, 5, 6, 7, 8, 9}

#2. Giao điểm của các bộ trong python

Một phép toán tập hợp phổ biến khác là giao của hai tập hợp, A và B. Phép toán tập hợp giao trả về một tập hợp chứa tất cả các phần tử có trong cả A và B.

Để tính giao lộ, bạn có thể sử dụng toán tử & hoặc phương thức .intersection(), như được giải thích trong đoạn mã sau.

print(setA & setB)

# Output
{9}

setA.intersection(setB)

# Output
{9}

Trong ví dụ này, mục 9 có mặt trong cả setA và setB; vì vậy tập giao nhau chỉ chứa phần tử này.

Giống như hợp của một tập hợp, giao của một tập hợp cũng là một phép toán giao hoán.

setB.intersection(setA)

# Output
{9}

#3. Đặt khác biệt trong python

Với hai tập hợp bất kỳ, phép hợp và giao giúp chúng ta tìm các phần tử có mặt trong cả hai và ít nhất một trong các tập hợp tương ứng. Mặt khác, sự khác biệt của tập hợp giúp chúng ta tìm thấy các phần tử có trong một tập hợp nhưng không có trong tập hợp khác.

– setA.difference(setB) đưa ra một tập hợp các phần tử chỉ xuất hiện trong setA, không có trong setB.

– setB.difference(setA) đưa ra một tập hợp các phần tử chỉ xuất hiện trong setB, không có trong setA.

print(setA - setB)

print(setB - setA)

# Output
{1, 3, 5, 7}
{8, 2, 4, 6}

Tất nhiên, AB không giống như BA, vì vậy sự khác biệt thiết lập không phải là một hoạt động giao hoán.

setA.difference(setB)
# {1, 3, 5, 7}

setB.difference(setA)
# {2, 4, 6, 8}

#4. Sự khác biệt của tập hợp đối xứng trong Python

Trong khi giao của các tập hợp cho chúng ta các phần tử có trong cả hai tập hợp, hiệu của tập hợp đối xứng trả về tập hợp các phần tử có trong chính xác một trong các tập hợp.

Hãy xem xét ví dụ sau.

setA = {1,3,5,7,10,12}
setB = {2,4,6,8,10,12}

Để tính toán một tập hợp các khác biệt đối xứng, bạn có thể sử dụng toán tử ^ hoặc phương thức .symmetric_difference().

print(setA ^ setB)

# Output
{1, 2, 3, 4, 5, 6, 7, 8}

Các phần tử 10 và 12 có mặt trong cả tập hợp A và tập hợp B. Do đó, chúng không có mặt trong tập hợp các phép đối xứng.

setA.symmetric_difference(setB)

# Output
{1, 2, 3, 4, 5, 6, 7, 8}

Bởi vì phép toán hiệu tập đối xứng thu thập tất cả các phần tử xuất hiện trong chính xác một trong hai tập hợp, nên tập hợp kết quả là giống nhau bất kể thứ tự mà các phần tử được thu thập. Do đó, hiệu đối xứng của các tập hợp là một phép toán giao hoán.

setB.symmetric_difference(setA)

# Output
{1, 2, 3, 4, 5, 6, 7, 8}

#5. Tập con và tập siêu trong Python

Trong lý thuyết tập hợp, tập con và tập siêu giúp hiểu được mối quan hệ giữa hai tập.

Cho hai tập hợp A và B, tập hợp B là tập con của A nếu tất cả các phần tử của B cũng có trong A. Và A là tập siêu của B.

Hãy xem xét một ví dụ về hai bộ: languages ​​​và languages_extends.

languages = {'Python', 'JavaScript','C','C++'}
languages_extended = {'Python', 'JavaScript','C','C++','Rust','Go','Scala'}

Trong Python, bạn có thể sử dụng phương thức .issubset() để kiểm tra xem một tập hợp đã cho có phải là tập hợp con của một tập hợp khác hay không.

setA.issubset(setB) trả về True nếu zbA là tập con của zbB; nếu không nó trả về Sai.

Trong ví dụ này, các ngôn ngữ là một tập hợp con của languages_extends.

languages.issubset(languages_extended)
# Output
True

Tương tự, bạn có thể sử dụng phương thức .issuperset() để kiểm tra xem một tập hợp đã cho có phải là tập hợp cha của một tập hợp khác hay không.

setA.issuperset(setB) trả về True nếu zbA là tập hợp lớn nhất của zb; nếu không nó trả về Sai.

languages_extended.issuperset(languages)
# Output
True

Vì ngôn ngữ_extends là một siêu ngôn ngữ, nên ngôn ngữ_extends.issuperset(ngôn ngữ) trả về True như được hiển thị ở trên.

Đăng kí

Tôi hy vọng hướng dẫn này đã giúp bạn hiểu cách các tập hợp Python hoạt động, các phương thức thiết lập cho hoạt động CRUD và các hoạt động tập hợp phổ biến. Trong bước tiếp theo, bạn có thể thử sử dụng chúng trong các dự án python của mình.

Bạn có thể xem các hướng dẫn Python chi tiết khác. Chúc bạn học tập vui vẻ!