Рубрики
Без рубрики

Python Bisect | Работа С Модулем Python Bisect

Когда мы хотим вставить данные, сохраняя список отсортированным, мы используем модуль python bisect. Python bisect имеет шесть функций, и каждая из них имеет свое собственное применение.

Автор оригинала: Team Python Pool.

Python Bisect | Работа С Модулем Python Bisect

Python bisect module удобен, когда нам нужно вставить новые данные, сохраняя их в отсортированном порядке. Без этого модуля это было бы настоящей болью для процессора наших систем. Наши данные остаются отсортированными, когда производится новая вставка. Единственное, что мы должны иметь в виду, – это то, что данные уже отсортированы.

Давайте узнаем о некоторых случаях использования Python bisect и о том, почему он так полезен в реальной жизни.

Импорт модуля Python bisect –

Модуль Python bisect поставляется с предустановленным python, и нам нужно импортировать его перед использованием. Единственным предварительным условием для использования этого модуля является то, что структура данных уже должна быть отсортирована. Иначе он не давал бы правильных ответов.

Чтобы импортировать этот модуль, используйте –

import bisect

Различные функции в модуле python bisect

В этом модуле доступно в общей сложности 6 функций, каждая из которых имеет свои приложения. Давайте изучим каждый из них.

Деление пополам (a, x[, lo[, hi]])

Эта функция при использовании возвращает индекс, по которому вы должны вставить данный элемент в данный список, сохраняя список отсортированным.

Первый аргумент-это список, в который вы хотите сделать вставку, x-это элемент, который мы хотим вставить. Lo и hi-это начальный и конечный индексы списка, который вы хотите рассмотреть. Если мы не передадим значения в последних двух параметрах, то будет рассмотрен весь список. Эти функции могут использоваться как в числовом списке, так и в списке, содержащем имена.

Предположим, у нас есть список, содержащий отметки в отсортированном порядке от самого высокого до самого низкого. И мы хотим выйти на новые рынки в том же списке, содержащем список отсортированных.

marks=[33,36,40,43,44,48,50]  
print(bisect.bisect(marks,new_marks))
Output- 
3
python bisect
питон делит пополам

Примечание – Помните, что индекс списка начинается с индекса 0.

bisect_left(a, x[, lo[, hi]])

Предположим, что элемент, который вы хотите вставить, уже присутствует в списке, bisect_left() возвращает индекс перед этим элементом. Давайте рассмотрим пример, чтобы лучше понять его.

marks=[33,36,40,42,43,44,48,50] 
bisect.bisect_left(marks,new_marks)
Output- 
3
питон делит пополам
питон делит пополам

bisect_right(a, x[, lo[, hi]])

В отличие от функции bisect_left (), если элемент уже присутствует, эта функция возвращает индекс после этого элемента.

marks=[33,36,40,42,43,44,48,50]  
bisect.bisect_right(marks,new_marks)
Output- 
4

Обратите внимание, что функция bisect() работает так же, как и bisect_right (), и является просто сокращением для bisect_right().

Время href=”https://en.wikipedia.org/wiki/Complexity”>сложность этих функций O(log(n)), так как она основана на концепции бинарного поиска. href=”https://en.wikipedia.org/wiki/Complexity”>сложность этих функций O(log(n)), так как она основана на концепции бинарного поиска.

вставить(a, x[, lo[, hi]])

Эта функция используется для вставки элемента в список, не нарушая его порядок. Другие вещи, такие как параметры, точно такие же, как bisect().

numbers=[1,2,5,7,11,13,19]  
bisect.insort(numbers,new_element) 
print(numbers)
Output-
[1, 2, 5, 7, 11, 13, 17, 19]

insert_left()

Это похоже на bisect_left(). Вставка происходит перед уже существующим элементом.

numbers=[1,2,5,7,11,13,17,19]  
bisect.insort(numbers,new_element) 
print(numbers)
Output-
[1, 2, 5, 7, 11, 13, 17, 19]

Insert_right()-

Он работает так же, как insert().

Примечание – Временная сложность insert() равна O(n).

Теперь, когда мы узнали об этих функциях, давайте попробуем найти индекс без использования модуля python bisect.

Программа для поиска индекса без модуля python bisect-

Давайте сделаем программу, работающую так же, как python bisect.bisect().

numbers=[10,12,14,17,19.2,22,23]  
for i in range(len(numbers)): 
    if numbers[i] < x: 
       pass 
   #For bisect.left() remove the below elif statement 
    elif numbers[i]: 
       pass 
   else: 
       print(i) 
       break
Output
4

Именно такую часть кода нам приходится писать, когда мы хотим найти индекс без использования bisect(). Кроме того, реализация этой программы занимает гораздо больше времени, чем bisect (), когда у нас много-много данных.

Теперь давайте запрограммируем insert()-

numbers=[10,12,14,17,19.2,22,23]  
for i in range(len(numbers)): 
    if numbers[i] < x: 
       pass 
   #For insort.left() remove the below elif statement 
    elif numbers[i]: 
       pass 
   else: 
       
       break
Output-
[10,12,14,17,17,19.2,22,23]

Теперь вы можете подумать о том, как легко модуль python bisect делает это для нас.

Еще Несколько Примеров-

  • Давайте посмотрим, как bisect() может помочь нам в строках-

Предположим, у вас есть список имен студентов в отсортированном порядке. Теперь новый студент по имени Маниш принимает прием. Теперь давайте посмотрим, как мы можем добавить его имя, сохраняя список отсортированным.

names=['Ashwini','Bulbul','Chetan','Naman','Zubair']  
bisect.insort(names,new) 
print(names)
Output-
['Ashwini', 'Bulbul', 'Chetan', 'Manish', 'Naman', 'Zubair']
  • Предположим, что мы хотим добавить список меток в наш список меток.
marks=[21,30,31,33,36,40,43,44,48,50]  
newlist=[32,48,29] 
for i in newlist: 
    bisect.insort(marks,i) 
print(marks)
Output-
[21, 29, 30, 31, 32, 33, 36, 40, 43, 44, 48, 48, 50]

Ограничения Python Bisect()-

  • Нам нужны элементы в отсортированном порядке. Чтобы решить эту проблему, мы можем использовать функцию python sort ().
marks=[21,30,43,12,29,50,48]  
marks.sort() 
newlist=[32,48,29] 
for i in newlist: 
    bisect.insort(marks,i) 
print(marks)
Output-
[12,21,29,29,30,32,43,48,48,50]
  • Если список находится в порядке убывания, нам сначала нужно преобразовать его в порядок возрастания.
marks=[50,49,48,47,46] 
marks.sort() 
newlist=[32,48,29] 
for i in newlist: 
    bisect.insort(marks,i) 
print(marks[::-1])
Output-
[50, 49, 48, 48, 47, 46, 32, 29]

Должен Читать:

  • Как преобразовать строку в нижний регистр в
  • Как вычислить Квадратный корень
  • Пользовательский ввод | Функция ввода () | Ввод с клавиатуры
  • Лучшая книга для изучения Python

Вывод

Как мы уже видели, существует несколько вариантов использования модуля python bisect. Если бы его там не было, нам пришлось бы писать много-много кода, а также это вызвало бы большую нагрузку на наши процессоры.

Попробуйте запустить программы на вашей стороне и дайте мне знать, если у вас есть какие-либо вопросы.

Счастливого кодирования!