Chuyển đến nội dung chính
Mô-đun 3 · Bài học 4 trong tổng số 412/36 trong khóa học~10 min
Bài học theo mô-đun (4/4)

bộ

bộ là tập hợp các phần tử duy nhất, không có thứ tự. Ba siêu năng lực:

  1. Tự động loại bỏ trùng lặp: việc thêm cùng một phần tử hai lần không có hiệu lực.
  2. O(1) kiểm tra tư cách thành viên: x in s cực kỳ nhanh ngay cả với hàng triệu người của các phần tử (dựa trên hàm băm, như dicts).
  3. Thiết lập các phép toán: hợp, giao, sai phân, sai đối xứng.

Tạo một bộ

Python
vuoto = set()           # ATTENZIONE: {} è un dict vuoto, non un set!
numeri = {1, 2, 3}
da_lista = set([1, 1, 2, 3, 3, 3])   # {1, 2, 3}

Chỉ riêng dấu ngoặc nhọn {} tạo một từ điển trống, không phải một tập hợp: cho một tập hợp trống bạn cần set().

Sửa đổi một bộ

Python
s = {1, 2, 3}
s.add(4)         # {1, 2, 3, 4}
s.add(1)         # nessun effetto (già presente)
s.discard(99)    # rimuove se presente, silenzioso altrimenti
s.remove(2)      # rimuove o solleva KeyError

Đặt thao tác

Python
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

a | b    # {1, 2, 3, 4, 5, 6}     unione
a & b    # {3, 4}                  intersezione
a - b    # {1, 2}                  differenza (in a ma non in b)
a ^ b    # {1, 2, 5, 6}            differenza simmetrica (xor)

Ngoài ra còn có các dạng phương thức (a.union(b), a.intersection(b), …) Ngoài ra, chấp nhận bất kỳ lần lặp nào, không chỉ các bộ.

Kiểm tra tư cách thành viên

Python
parole = {"ciao", "mondo", "python"}
"ciao" in parole       # True   O(1)
"java" not in parole   # True

Để so sánh: tìm kiếm với in bên trong list là O(n) và trong thời gian dài liệt kê nó chậm hơn nhiều.

Bộ đông lạnh: phiên bản bất biến

frozenset({1, 2, 3}) là phiên bản có thể băm: nó có thể là khóa chính tả hoặc phần tử của tập hợp khác.

Đặt hoạt động và hiệu suất

Các bộ được triển khai dưới dạng bảng băm, giúp việc kiểm tra tư cách thành viên (x in my_set) cực kỳ nhanh: nó chạy trong thời gian không đổi O(1), không giống như các danh sách mà việc tìm kiếm mất thời gian tuyến tính O(n). Ngoài ra, chúng còn hỗ trợ các phép toán đại số như hợp (|), giao (&) và hiệu (-).

Hãy thử nó

tập thể dục#python.m3.l4.e1
Nỗ lực: 0Đang tải…

Cho danh sách `nums = [1, 2, 2, 3, 3, 3, 4]`, xây dựng `unique_items` với các giá trị duy nhất (theo bất kỳ thứ tự nào) rồi tính `count` dưới dạng len(unique_items). Đánh giá `đếm`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

set(nums) loại bỏ các bản sao.

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#python.m3.l4.e2
Nỗ lực: 0Đang tải…

Cho `a = {1, 2, 3, 4}` và `b = {3, 4, 5, 6}`, tính giao điểm thành `common_items` và hiệu a-b thành `only_a`. Đánh giá bộ dữ liệu `(common_items, only_a)`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

& giao lộ, - sự khác biệt.

Giải pháp khả dụng sau 3 lần thử

Thử thách bổ sung

tập thể dục#python.m3.l4.e3
Nỗ lực: 0Đang tải…

Given two sets `set_a = {1, 2, 3}` and `set_b = {2, 3, 4}`, calculate the mathematical intersection of the two sets (their common elements). Store the resulting set in `common_elements` and evaluate it.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Bạn có thể sử dụng toán tử & hoặc phương thức set_a.intersection(set_b).

Giải pháp khả dụng sau 3 lần thử