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:
- 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.
- O(1) kiểm tra tư cách thành viên:
x in scự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). - 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ộ
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ộ
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
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
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ó
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`.
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
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)`.
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
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.
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ử