Документация Python неофициальный перевод

bisect.md

137 строк · 4.4 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.0/library/bisect.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `bisect` – алгоритм бисекции массива89Этот модуль позволяет поддерживать список в отсортированном виде без необходимости сортировать его после каждой вставки. Для длинных списков элементов с дорогостоящими операциями сравнения такой подход может быть эффективнее более распространённых. Модуль называется `bisect`, потому что использует простой алгоритм бисекции. Исходный код может быть особенно полезен как рабочий пример этого алгоритма (граничные условия уже корректны!).1011Предоставляются следующие функции:1213#### `[bisect.bisect_left]bisect.bisect_left(list, item[, lo[, hi]])`1415Находит подходящую точку вставки для1617*item*1819в2021*list*2223, чтобы сохранить упорядоченность. Параметры2425*lo*2627и2829*hi*3031можно использовать для указания подмножества списка, которое следует рассматривать; по умолчанию используется весь список. Если3233*item*3435уже присутствует в3637*list*3839, точка вставки будет перед (левее) любых существующих записей. Возвращаемое значение подходит для использования в качестве первого параметра4041`list.insert()`4243. Предполагается, что4445*list*4647уже отсортирован.4849#### `[bisect.bisect_right]bisect.bisect_right(list, item[, lo[, hi]])`5051Похожа на5253[`bisect_left()`](https://python-all.ru/3.0/library/bisect.html#bisect.bisect_left)5455, но возвращает точку вставки, которая находится после (правее) любых существующих записей5657*item*5859в6061*list*6263.6465#### `[bisect.bisect]bisect.bisect(...)`6667Псевдоним6869[`bisect_right()`](https://python-all.ru/3.0/library/bisect.html#bisect.bisect_right)7071.7273#### `[bisect.insort_left]bisect.insort_left(list, item[, lo[, hi]])`7475Вставляет7677*item*7879в8081*list*8283в отсортированном порядке. Это эквивалентно8485`list.insert(bisect.bisect_left(list, item, lo, hi), item)`8687. Предполагается, что8889*list*9091уже отсортирован.9293#### `[bisect.insort_right]bisect.insort_right(list, item[, lo[, hi]])`9495Похожа на9697[`insort_left()`](https://python-all.ru/3.0/library/bisect.html#bisect.insort_left)9899, но вставляет100101*item*102103в104105*list*106107после любых существующих записей108109*item*110111.112113#### `[bisect.insort]bisect.insort(...)`114115Псевдоним116117[`insort_right()`](https://python-all.ru/3.0/library/bisect.html#bisect.insort_right)118119.120121## Примеры122123Функция [`bisect()`](https://python-all.ru/3.0/library/bisect.html#bisect.bisect) часто бывает полезна для категоризации числовых данных. В этом примере [`bisect()`](https://python-all.ru/3.0/library/bisect.html#bisect.bisect) используется для поиска буквенной оценки за экзамен (скажем) на основе набора упорядоченных числовых границ: 85 и выше – ‘A’, 75–84 – ‘B’ и т. д.124125```python126>>> grades = "FEDCBA"127>>> breakpoints = [30, 44, 66, 75, 85]128>>> from bisect import bisect129>>> def grade(total):130...           return grades[bisect(breakpoints, total)]131...132>>> grade(66)133'C'134>>> map(grade, [33, 99, 77, 44, 12, 88])135['E', 'A', 'B', 'D', 'F', 'A']136```137