Trong toán học, có tập hợp và tập hợp có thứ tự (osets).
- set : một vùng chứa không có thứ tự của các phần tử duy nhất (Đã triển khai)
- oset : một vùng chứa có thứ tự các phần tử duy nhất (NotImplemented)
Trong Python, chỉ các tập hợp được triển khai trực tiếp. Chúng ta có thể mô phỏng hệ điều hành bằng các phím dict thông thường ( 3.7+ ).
Được
a = [1, 2, 20, 6, 210, 2, 1]
b = {2, 6}
Mã
oset = dict.fromkeys(a).keys()
# dict_keys([1, 2, 20, 6, 210])
Bản giới thiệu
Các bản sao bị xóa, thứ tự chèn được giữ nguyên.
list(oset)
# [1, 2, 20, 6, 210]
Hoạt động giống như thiết lập trên các phím chính tả.
oset - b
# {1, 20, 210}
oset | b
# {1, 2, 5, 6, 20, 210}
oset & b
# {2, 6}
oset ^ b
# {1, 5, 20, 210}
Chi tiết
Lưu ý: một cấu trúc không có thứ tự không loại trừ các phần tử có thứ tự . Đúng hơn, trật tự duy trì không được đảm bảo. Thí dụ:
assert {1, 2, 3} == {2, 3, 1} # sets (order is ignored)
assert [1, 2, 3] != [2, 3, 1] # lists (order is guaranteed)
Một người có thể được hài lòng để khám phá ra rằng một danh sách và MultiSet (mset) là hai hấp dẫn hơn, cấu trúc dữ liệu toán học:
- danh sách : một vùng chứa có thứ tự các phần tử cho phép sao chép (Đã triển khai)
- mset : một vùng chứa các phần tử không có thứ tự cho phép sao chép (NotImplemented) *
Tóm lược
Container | Ordered | Unique | Implemented
----------|---------|--------|------------
set | n | y | y
oset | y | y | n
list | y | n | y
mset | n | n | n*
* Một tập hợp có thể được mô phỏng gián tiếp với collections.Counter()
, một ánh xạ giống như mệnh đề của các phép nhân (số đếm).