Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Các hàm thuật toán Bisect trong Python

Module này cung cấp hỗ trợ để duy trì danh sách theo thứ tự đã sắp xếp mà không cần sắp xếp lại danh sách sau mỗi lần chèn phần tử mới. Chúng ta sẽ tập trung vào hai hàm: insort_left và insort_right.

insort_left

Hàm này trả về danh sách đã sắp xếp sau khi chèn số vào vị trí cần thiết. Nếu phần tử đã có mặt trong danh sách, phần tử sẽ được chèn ở vị trí trái cùng có thể. Hàm nhận 4 tham số: danh sách cần xử lý, số cần chèn, vị trí bắt đầu, vị trí kết thúc. Giá trị mặc định của vị trí bắt đầu và kết thúc là 0 và độ dài danh sách.

insort_right

Tương tự như insort_left, ngoại trừ phần tử mới được chèn sau các phần tử hiện có đã tồn tại mà không duy trì thứ tự sắp xếp nghiêm ngặt.

Cú pháp

bisect.insort_left(a, x, lo=0, hi=len(a))
bisect.insort_right(a, x, lo=0, hi=len(a))
# a: dãy cho trước, x: số cần chèn

Ví dụ

import bisect
listA = [11, 13, 23, 7, 13, 15]
print("Danh sách cho trước:", listA)
bisect.insort_left(listA, 14)
print("Bisect left:\n", listA)
listB = [11, 13, 23, 7, 13, 15]
print("Danh sách cho trước:", listB)
bisect.insort_right(listB, 14, 0, 4)
print("Bisect right:\n", listB)

Kết quả

Danh sách cho trước: [11, 13, 23, 7, 13, 15]
Bisect left: [11, 13, 14, 23, 7, 13, 15]
Danh sách cho trước: [11, 13, 23, 7, 13, 15]
Bisect right: [11, 13, 14, 23, 7, 13, 15]