У меня есть список перестановок строки и список, полный слов из лексики. Я хочу, чтобы для каждой перестановки выяснялось, находится ли она в списке слов. Я пробовал цикл while и просто грубо-принудительный, и это дало мне кучу слов из списка слов. Но когда я попробовал этот бинарный поиск:Бинарный поиск строки в списке строк
def binärSökning(word, wordList):
first = 0
last = len(wordList) - 1
found = False
while first <= last and not found:
middle = (first + last)//2
if wordList[middle] == word:
found = True
else:
if word < wordList[middle]:
last = middle - 1
else:
first = middle + 1
return found
я не получил ничего взамен, просто пустой список (просто ложь, если она возвращает истину, он добавляет слово в другой список). Может кто-нибудь, пожалуйста, скажите мне, почему это не возвращает истину, когда она попадает в хорошее слово?
Edit: Что вызов функции просто для петли:
foundWords = set()
for word in listOfWords:
if binärSökning(word, NewWordList):
foundWords.add(word)
return foundWords
Если NewWordList является более узкий список возможных слов, это может быть, ничего плохого с ним, так как он работал, когда я попробовал грубую силу.
Что бы я хотел в результате, когда функция поиска возвращает true, цикл for добавляет это слово к набору, которое затем представляется пользователю после завершения программы.
Можете ли вы добавить пример того, что у вас есть, и что вы хотели бы получить? Например. некоторые фиктивные данные, чтобы мы могли воспроизвести ваш код. –
Я обновил немного больше объяснений. – Olof
Это первое - и, надеюсь, последнее время я видел diaereses в имени функции. Я удивлен, что он даже работает! Для хорошего порядка, возможно, придерживайтесь букв без акцента :). –