В списке кортежей (где первый - строка, а второй - целое число) мне пришлось найти все кортежи, первый элемент которых начинается с входной строки, используя бинарный поиск. До этого я лексикографически c сортировал этот список кортежей по первому элементу кортежа, а затем, используя бинарный поиск, добавлял кортежи, первый элемент которых равен входной строке, в новый список. Вот мой код
def binary_search(x,list):
l=0
r=len(list)-1
while l<=r:
m=(r-1)/2+l
m=int(m)
if list[m][0][0:len(x)]==x:
return list[m]
elif list[m][0][0:len(x)]<x:
l=m+1
elif list[m][0][0:len(x)]>x:
r=m-1
return -1
И затем я добавляю список кортежей, которые я хочу, в новый список
new_list=[]
s=input()
lexicographic_sort(list) #function that sorts using lambda
a=binary_search(s,list)
while a!=-1:
new_list.append(a)
list.remove(a)
a=binary_search(s,list)
print(new_list)
Проблема заключается в том, что, когда я ввожу только 1 символ, я получаю результаты, которые хочу , но при вводе более 1 символа программа просто зависает. Более запутанная проблема при вводе более 1 символа состоит в том, что когда я удаляю, а l oop просто для вызова одного бинарного поиска, он возвращает мне кортеж, поэтому я не знаю, почему моя программа зависает.
Список [('school', 312), ('bus', 421), ('scheme', 53), ('and', 423), ('maybe', 143), ('schemes', 53), ('ands', 423), ('maybes', 143), ('schemess', 53), ('andsss', 423), ('maybesss', 143)]
Вход 1: с c
Выход: [('schemess', 53), ('school', 312), ('scheme', 53), ('schemes', 53)]
Вход 2: может
Выход: (заморозить)