Bộ sắp xếp là cấu trúc dữ liệu ánh xạ các phím duy nhất cho điểm số. Các hoạt động sau được cho phép trên bộ sắp xếp: Nội dung chính ShowShowSắp xếp
- Lặp lại theo thứ tự hoặc điểm số [cả tăng dần và giảm dần]
- Nhận điểm cho khóa [hiệu suất tương tự như đối với Dict]
- Nhận chỉ mục cho khóa [O [log n], n là sizeof set]
- Nhận khóa cho Index [o [log n]]
- Cắt theo chỉ mục [o [m + log n], m là chiều dài của lát cắt]
- Cắt theo điểm [O [m + log n], m là chiều dài của lát cắt]
- Vật phẩm/Xóa cắt theo chỉ mục và điểm số [hiệu suất tương tự như để cắt]
- Chèn với bất kỳ điểm nào cũng có hiệu suất o [log n]
Cấu trúc dữ liệu được mô hình hóa chặt chẽ sau các bộ được sắp xếp của Redis. Trong nội bộ, nó bao gồm một ánh xạ giữa các phím và điểm số, và một danh sách bỏ qua cho điểm số.
Các trường hợp sử dụng cho Sắp xếp đang theo sau:
- Bảng xếp hạng cho một trò chơi
- Hàng đợi ưu tiên [Hỗ trợ xóa nhiệm vụ]
- Danh sách hẹn giờ [cũng hỗ trợ xóa]
- Bộ nhớ cache với trục xuất dựa trên TTL, LFU hoặc LRU
- Cơ sở dữ liệu tìm kiếm với điểm số liên quan
- Số liệu thống kê
- Thay thế cho
>>> ss['player20'], ss['player21'] [400, 210]
3 bằng>>> ss['player20'], ss['player21'] [400, 210]
4 nhanh hơn
Mã ví dụ
________ 107 [Khác] [Nguồn] ¶
>>> from sortedsets import SortedSet >>> ss = SortedSet[]
Danh sách được sắp xếp Python được thực hiện như thế nào?
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...
Làm thế nào được sắp xếp tập hợp được thực hiện?
>>> ss['player20'], ss['player21'] [400, 210]
Có một bộ được sắp xếp trong Python?
>>> ss.index['player20'], ss.index['player21'] [29, 17]
Python có được sắp xếp theo mặc định không?
>>> ss['player49'] 490 >>> ss.by_score[470:511] >>> for k, v in _.items[]: ... print[k, v] ... player47 470 player22 484 player49 490 player51 510
Lặp lại theo thứ tự hoặc điểm số [cả tăng dần và giảm dần]
>>> page, pagesize = 25, 10 >>> ss.by_index[page*pagesize:page*pagesize + pagesize] >>> len[_] 10
Nhận điểm cho khóa [hiệu suất tương tự như đối với Dict]introduction is the best way to get started.
Nhận chỉ mục cho khóa [O [log n], n là sizeof set]
>>> ss['player20'], ss['player21'] [400, 210]
5
________ 107 [Khác] [Nguồn] ¶
Danh sách được sắp xếp Python được thực hiện như thế nào?[iterable=None, key=None][source]¶Làm thế nào được sắp xếp tập hợp được thực hiện?
Có một bộ được sắp xếp trong Python?Python có được sắp xếp theo mặc định không?
Lặp lại theo thứ tự hoặc điểm số [cả tăng dần và giảm dần]
Nhận điểm cho khóa [hiệu suất tương tự như đối với Dict]
>>> ss.index['player20'], ss.index['player21'] [29, 17]
0>>> ss.index['player20'], ss.index['player21'] [29, 17]
1>>> ss.index['player20'], ss.index['player21'] [29, 17]
2>>> ss.index['player20'], ss.index['player21'] [29, 17]
3>>> ss.index['player20'], ss.index['player21'] [29, 17]
4
Nhận chỉ mục cho khóa [O [log n], n là sizeof set]
>>> ss.index['player20'], ss.index['player21'] [29, 17]
5>>> ss.index['player20'], ss.index['player21'] [29, 17]
6>>> ss.index['player20'], ss.index['player21'] [29, 17]
7
Nhận khóa cho Index [o [log n]]
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...12.
>>> ss.index['player20'], ss.index['player21'] [29, 17]
8>>> ss.index['player20'], ss.index['player21'] [29, 17]
9>>> ss['player49'] 490 >>> ss.by_score[470:511] >>> for k, v in _.items[]: ... print[k, v] ... player47 470 player22 484 player49 490 player51 510
0
>>> ss['player49'] 490 >>> ss.by_score[470:511] >>> for k, v in _.items[]: ... print[k, v] ... player47 470 player22 484 player49 490 player51 510
1>>> ss['player49'] 490 >>> ss.by_score[470:511] >>> for k, v in _.items[]: ... print[k, v] ... player47 470 player22 484 player49 490 player51 510
2>>> ss['player49'] 490 >>> ss.by_score[470:511] >>> for k, v in _.items[]: ... print[k, v] ... player47 470 player22 484 player49 490 player51 510
3>>> ss['player49'] 490 >>> ss.by_score[470:511] >>> for k, v in _.items[]: ... print[k, v] ... player47 470 player22 484 player49 490 player51 510
4>>> ss['player49'] 490 >>> ss.by_score[470:511] >>> for k, v in _.items[]: ... print[k, v] ... player47 470 player22 484 player49 490 player51 510
5>>> ss['player49'] 490 >>> ss.by_score[470:511] >>> for k, v in _.items[]: ... print[k, v] ... player47 470 player22 484 player49 490 player51 510
6>>> ss['player49'] 490 >>> ss.by_score[470:511] >>> for k, v in _.items[]: ... print[k, v] ... player47 470 player22 484 player49 490 player51 510
7>>> ss['player49'] 490 >>> ss.by_score[470:511] >>> for k, v in _.items[]: ... print[k, v] ... player47 470 player22 484 player49 490 player51 510
8
Cắt theo điểm [O [m + log n], m là chiều dài của lát cắt]
>>> ss['player49'] 490 >>> ss.by_score[470:511] >>> for k, v in _.items[]: ... print[k, v] ... player47 470 player22 484 player49 490 player51 510
9>>> page, pagesize = 25, 10 >>> ss.by_index[page*pagesize:page*pagesize + pagesize] >>> len[_] 10
0>>> page, pagesize = 25, 10 >>> ss.by_index[page*pagesize:page*pagesize + pagesize] >>> len[_] 10
1>>> page, pagesize = 25, 10 >>> ss.by_index[page*pagesize:page*pagesize + pagesize] >>> len[_] 10
2
Vật phẩm/Xóa cắt theo chỉ mục và điểm số [hiệu suất tương tự như để cắt]
>>> page, pagesize = 25, 10 >>> ss.by_index[page*pagesize:page*pagesize + pagesize] >>> len[_] 10
3>>> page, pagesize = 25, 10 >>> ss.by_index[page*pagesize:page*pagesize + pagesize] >>> len[_] 10
4>>> page, pagesize = 25, 10 >>> ss.by_index[page*pagesize:page*pagesize + pagesize] >>> len[_] 10
5>>> page, pagesize = 25, 10 >>> ss.by_index[page*pagesize:page*pagesize + pagesize] >>> len[_] 10
6>>> page, pagesize = 25, 10 >>> ss.by_index[page*pagesize:page*pagesize + pagesize] >>> len[_] 10
7>>> page, pagesize = 25, 10 >>> ss.by_index[page*pagesize:page*pagesize + pagesize] >>> len[_] 10
8
Chèn với bất kỳ điểm nào cũng có hiệu suất o [log n]
>>> page, pagesize = 25, 10 >>> ss.by_index[page*pagesize:page*pagesize + pagesize] >>> len[_] 10
9>>> ss['player20'], ss['player21'] [400, 210]
70>>> ss['player20'], ss['player21'] [400, 210]
71
Cấu trúc dữ liệu được mô hình hóa chặt chẽ sau các bộ được sắp xếp của Redis. Trong nội bộ, nó bao gồm một ánh xạ giữa các phím và điểm số, và một danh sách bỏ qua cho điểm số.
Các trường hợp sử dụng cho Sắp xếp đang theo sau:[iterable=None, key=None][source]¶Bảng xếp hạng cho một trò chơi
Hàng đợi ưu tiên [Hỗ trợ xóa nhiệm vụ]
Danh sách hẹn giờ [cũng hỗ trợ xóa]
Bộ nhớ cache với trục xuất dựa trên TTL, LFU hoặc LRU
Cơ sở dữ liệu tìm kiếm với điểm số liên quanSố liệu thống kê – initial values [optional]
Thay thế cho
>>> ss['player20'], ss['player21'] [400, 210]
3 bằng>>> ss['player20'], ss['player21'] [400, 210]
4 nhanh hơn – function used to extract comparison key [optional]
Chèn một số người chơi vào Sắp xếp [với một số điểm được tạo ra lạ]:
Hãy tìm ra điểm cho người chơi:
Hãy tìm ra vị trí xếp hạng của họ:[value][source]¶Hãy tìm ra những người chơi có điểm tương tự như một người:
Hãy tìm hiểu người chơi trên xếp hạng trang 25:>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...05
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...06 is an Apache2 licensed Python sorted collections library, written in pure-Python, and fast as C-extensions. The introduction is the best way to get started.
Có thể lặp lại - giá trị ban đầu [tùy chọn] – search for value in sorted set – search for value in sorted set
Khóa - chức năng được sử dụng để trích xuất khóa so sánh [tùy chọn]________ 63¶
Hàm được sử dụng để trích xuất khóa so sánh từ các giá trị.[][source]¶[][source]¶Sắp xếp SET so sánh các giá trị trực tiếp khi hàm khóa không có.
________ 64 [Giá trị] [Nguồn] ¶
Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.
>>> ss['player20'], ss['player21'] [400, 210]75
>>> ss['player20'], ss['player21'] [400, 210]76[][source]¶ [][source]¶
Độ phức tạp thời gian chạy: O [1]
Giá trị - Tìm kiếm giá trị theo bộ được sắp xếp
Khóa - chức năng được sử dụng để trích xuất khóa so sánh [tùy chọn]________ 63¶
Hàm được sử dụng để trích xuất khóa so sánh từ các giá trị.[][source]¶[value][source]¶Sắp xếp SET so sánh các giá trị trực tiếp khi hàm khóa không có.
________ 64 [Giá trị] [Nguồn] ¶
Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.>>> ss['player20'], ss['player21']
[400, 210]
75 >>> ss['player20'], ss['player21']
[400, 210]
76[][source]¶ – value to add to sorted set
________ 63¶
Hàm được sử dụng để trích xuất khóa so sánh từ các giá trị.[][source]¶
________ 64 [Giá trị] [Nguồn] ¶
Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.>>> ss['player20'], ss['player21']
[400, 210]
75 >>> ss['player20'], ss['player21']
[400, 210]
76[][source]¶ – value to discard from sorted set
________ 63¶
Hàm được sử dụng để trích xuất khóa so sánh từ các giá trị.[][source]¶
Sắp xếp SET so sánh các giá trị trực tiếp khi hàm khóa không có.
________ 64 [Giá trị] [Nguồn] ¶
Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.>>> ss['player20'], ss['player21']
[400, 210]
75 >>> ss['player20'], ss['player21']
[400, 210]
76[][source]¶ – integer or slice for indexing
________ 63¶
Hàm được sử dụng để trích xuất khóa so sánh từ các giá trị.[][source]¶Sắp xếp SET so sánh các giá trị trực tiếp khi hàm khóa không có. – if index out of range
________ 64 [Giá trị] [Nguồn] ¶[index][source]¶Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.
>>> ss['player20'], ss['player21'] [400, 210]75
>>> ss['player20'], ss['player21'] [400, 210]76[][source]¶
Sắp xếp SET so sánh các giá trị trực tiếp khi hàm khóa không có.
________ 64 [Giá trị] [Nguồn] ¶
Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.>>> ss['player20'], ss['player21']
[400, 210]
75 >>> ss['player20'], ss['player21']
[400, 210]
76[][source]¶ – integer or slice for indexing
Sắp xếp SET so sánh các giá trị trực tiếp khi hàm khóa không có. – if index out of range
________ 64 [Giá trị] [Nguồn] ¶[][source]¶Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.
>>> ss['player20'], ss['player21'] [400, 210]75
>>> ss['player20'], ss['player21'] [400, 210]76[][source]¶
Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.
>>> ss['player20'], ss['player21'] [400, 210]75
>>> ss['player20'], ss['player21'] [400, 210]76[][source]¶ [][source]¶
Độ phức tạp thời gian chạy: O [1]
Giá trị - Tìm kiếm giá trị theo bộ được sắp xếp
Hàm được sử dụng để trích xuất khóa so sánh từ các giá trị.[value][source]¶[index=- 1][source]¶>>> ss.index['player20'], ss.index['player21'] [29, 17]5Thông số
Có thể lặp lại - giá trị ban đầu [tùy chọn] – value to add to sorted set
Khóa - chức năng được sử dụng để trích xuất khóa so sánh [tùy chọn][value][source]¶
________ 64 [Giá trị] [Nguồn] ¶
Hàm được sử dụng để trích xuất khóa so sánh từ các giá trị.>>> ss.index['player20'], ss.index['player21']
[29, 17]
6Thông số [int] – index of value [default -1]
________ 63¶
Hàm được sử dụng để trích xuất khóa so sánh từ các giá trị.[][source]¶Sắp xếp SET so sánh các giá trị trực tiếp khi hàm khóa không có. – if index is out of range
________ 64 [Giá trị] [Nguồn] ¶[value][source]¶Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.
>>> ss['player20'], ss['player21'] [400, 210]75
>>> ss['player20'], ss['player21'] [400, 210]76[][source]¶
________ 64 [Giá trị] [Nguồn] ¶
Độ phức tạp thời gian chạy: O [1]Giá trị - Tìm kiếm giá trị theo bộ được sắp xếp – value to remove from sorted set
Hàm được sử dụng để trích xuất khóa so sánh từ các giá trị.[][source]¶Sắp xếp SET so sánh các giá trị trực tiếp khi hàm khóa không có. – if value is not in sorted set
________ 64 [Giá trị] [Nguồn] ¶[*iterables][source]¶Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.
>>> ss['player20'], ss['player21'] [400, 210]75
>>> ss['player20'], ss['player21'] [400, 210]76[][source]¶
Độ phức tạp thời gian chạy: O [1]
Giá trị - Tìm kiếm giá trị theo bộ được sắp xếp
Hàm được sử dụng để trích xuất khóa so sánh từ các giá trị.[value][source]¶>>> ss.index['player20'], ss.index['player21']
[29, 17]
5Thông số – iterable arguments
________ 63¶
Có thể lặp lại - giá trị ban đầu [tùy chọn] – value to add to sorted set[*iterables][source]¶Sắp xếp SET so sánh các giá trị trực tiếp khi hàm khóa không có.
________ 64 [Giá trị] [Nguồn] ¶
Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.
Khóa - chức năng được sử dụng để trích xuất khóa so sánh [tùy chọn][value][source]¶>>> ss.index['player20'], ss.index['player21']
[29, 17]
5Thông số –
iterable arguments
________ 63¶
Có thể lặp lại - giá trị ban đầu [tùy chọn] – value to add to sorted set[*iterables][source]¶Sắp xếp SET so sánh các giá trị trực tiếp khi hàm khóa không có.
________ 64 [Giá trị] [Nguồn] ¶
Trả về true nếu giá trị là một yếu tố của tập hợp được sắp xếp.
Khóa - chức năng được sử dụng để trích xuất khóa so sánh [tùy chọn][value][source]¶Hàm được sử dụng để trích xuất khóa so sánh từ các giá trị. – iterable arguments
>>> ss.index['player20'], ss.index['player21'] [29, 17]6Thông số
Có thể lặp lại - giá trị ban đầu [tùy chọn] – value to discard from sorted set
Khóa - chức năng được sử dụng để trích xuất khóa so sánh [tùy chọn][index][source]¶[*iterables][source]¶>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...0Thông số
Phương pháp Intersection_Update cũng tương ứng với toán tử
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...04.
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...05
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...06
Chỉ giữ các giá trị được tìm thấy trong chính nó và tất cả các vòng lặp.
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...7Thông số
iterables - những đối số có thể lặp lại – iterable arguments – iterable arguments
Trả lạibộ sắp xếp mới
________ 103 [*iterables] [Nguồn] ¶[other][source]¶[other][source]¶Cập nhật tập hợp được sắp xếp với giao điểm của Iterables.
Phương pháp Intersection_Update cũng tương ứng với toán tử
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...04.
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...05
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...06
Chỉ giữ các giá trị được tìm thấy trong chính nó và tất cả các vòng lặp.
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...7Thông số
iterables - những đối số có thể lặp lại – iterable arguments – other iterable
Trả lạibộ sắp xếp mới
________ 103 [*iterables] [Nguồn] ¶[other][source]¶[other][source]¶Cập nhật tập hợp được sắp xếp với giao điểm của Iterables.
Phương pháp Intersection_Update cũng tương ứng với toán tử
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...04.
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...05
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...06
Chỉ giữ các giá trị được tìm thấy trong chính nó và tất cả các vòng lặp.
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...7Thông số
iterables - những đối số có thể lặp lại – iterable arguments – other iterable
Trả lạibộ sắp xếp mới
________ 103 [*iterables] [Nguồn] ¶[other][source]¶[*iterables][source]¶Cập nhật tập hợp được sắp xếp với giao điểm của Iterables.
Phương pháp Intersection_Update cũng tương ứng với toán tử
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...8Thông số
iterables - những đối số có thể lặp lại – iterable arguments – iterable arguments
Trả lạibộ sắp xếp mới
________ 103 [*iterables] [Nguồn] ¶[other][source]¶[*iterables][source]¶Cập nhật tập hợp được sắp xếp với giao điểm của Iterables.
Phương pháp Intersection_Update cũng tương ứng với toán tử
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...8Thông số
iterables - những đối số có thể lặp lại – iterable arguments – iterable arguments
Trả lạibộ sắp xếp mới
________ 103 [*iterables] [Nguồn] ¶[other][source]¶[][source]¶Cập nhật tập hợp được sắp xếp với giao điểm của Iterables.
Phương pháp Intersection_Update cũng tương ứng với toán tử
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...8Thông số
bộ sắp xếp mới
________ 103 [*iterables] [Nguồn] ¶[other][source]¶[value][source]¶Cập nhật tập hợp được sắp xếp với giao điểm của Iterables.
Phương pháp Intersection_Update cũng tương ứng với toán tử
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...8Thông số
chính nó – other iterable05
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...06 – value to count in sorted setTrả lại
bộ sắp xếp mới
________ 103 [*iterables] [Nguồn] ¶[other][source]¶[][source]¶Cập nhật tập hợp được sắp xếp với giao điểm của Iterables.
Phương pháp Intersection_Update cũng tương ứng với toán tử
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...8Thông số
bộ sắp xếp mới
________ 103 [*iterables] [Nguồn] ¶[other][source]¶[][source]¶Cập nhật tập hợp được sắp xếp với giao điểm của Iterables.
Phương pháp Intersection_Update cũng tương ứng với toán tử
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...8Thông số
chính nó – other iterable
>>> for i in range[1, 1000]:
... ss['player' + str[i]] = i*10 if i % 2 else i*i
...
9Thông số.
________ 103 [*iterables] [Nguồn] ¶[*iterables][source]¶
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...04.
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...05
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...06
>>> ss['player20'], ss['player21'] [400, 210]0Thông số
>>> for i in range[1, 1000]:
... ss['player' + str[i]] = i*10 if i % 2 else i*i
...
04.>>> for i in range[1, 1000]:
... ss['player' + str[i]] = i*10 if i % 2 else i*i
...
05 >>> for i in range[1, 1000]:
... ss['player' + str[i]] = i*10 if i % 2 else i*i
...
06>>> ss['player20'], ss['player21']
[400, 210]
1Thông số
________ 103 [*iterables] [Nguồn] ¶[][source]¶as a dual data structure: It is a combination of both a hash and skip list. The hash part maps objects to scores and the skip list maps scores to objects.
>>> for i in range[1, 1000]:
... ss['player' + str[i]] = i*10 if i % 2 else i*i
...
04.Trả lại
________ 103 [*iterables] [Nguồn] ¶[value][source]¶There is also a sorted[] built-in function that builds a new sorted list from an iterable.
>>> for i in range[1, 1000]:
... ss['player' + str[i]] = i*10 if i % 2 else i*i
...
04.>>> ss['player20'], ss['player21']
[400, 210]
2Thông số
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...905
>>> for i in range[1, 1000]: ... ss['player' + str[i]] = i*10 if i % 2 else i*i ...06 – value to count in sorted setyou will never be able to sort items inside a set*.