การดำเนินการเรียงลำดับหลังจากการแทรกทุกครั้งในรายการแบบยาวอาจมีราคาแพงในแง่ของเวลาที่ตัวประมวลผลใช้ไป โมดูลแบบแบ่งครึ่งช่วยให้มั่นใจได้ว่ารายการจะถูกจัดเรียงโดยอัตโนมัติหลังจากการแทรก เพื่อจุดประสงค์นี้ มันใช้อัลกอริธึมแบบสองส่วน โมดูลนี้มีฟังก์ชันดังต่อไปนี้:
bisect_left()
วิธีนี้จะระบุตำแหน่งจุดแทรกสำหรับองค์ประกอบที่กำหนดในรายการเพื่อรักษาลำดับการจัดเรียง หากมีอยู่แล้วในรายการ จุดแทรกจะอยู่ก่อน (ทางด้านซ้ายของ) รายการที่มีอยู่ ค่าที่ส่งคืนสามารถใช้เป็นพารามิเตอร์แรกในการ list.insert()
bisect_right()
เมธอดนี้คล้ายกับ bisect_left() แต่ส่งคืนจุดแทรกที่อยู่หลัง (ทางด้านขวาของ) รายการที่มีอยู่ของ x ใน a
bisect.insort_left()
วิธีนี้จะแทรกค่าที่กำหนดในลำดับที่เรียงลำดับ ซึ่งเทียบเท่ากับ a.insert(bisect.bisect_left(a, x, lo, hi), x)
bisect.insort_right()
bisect.insort()
วิธีการทั้งสองจะคล้ายกับ insort_left() แต่การแทรกค่าที่กำหนดในรายการหลังจากรายการที่มีอยู่ของค่าเดียวกัน
ตัวอย่าง
>>> nums = [45,21,34,87,56,12,5,98,30,63] >>> nums.sort() >>> nums [5, 12, 21, 30, 34, 45, 56, 63, 87, 98] >>> import bisect >>> p = bisect.bisect_left(nums,50) >>> p 6 >>> nums.insert(p,50) >>> nums [5, 12, 21, 30, 34, 45, 50, 56, 63, 87, 98] >>> bisect.insort(nums, 29) >>> nums [5, 12, 21, 29, 30, 34, 45, 50, 56, 63, 87, 98]