我有一个字符串排列列表,以及一个充满词典单词的列表。我想为每个排列找出它是否在单词列表中。我尝试了一个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
我没有得到任何回报,只是一个空列表(只是假,如果它返回true,它将该词添加到另一个列表)。任何人都可以告诉我为什么当它碰到一个好词时它没有回归真实?
编辑: 什么叫这个函数只是一个for循环:
foundWords = set()
for word in listOfWords:
if binärSökning(word, NewWordList):
foundWords.add(word)
return foundWords
NewWordList是一个较窄的可能单词列表,它没有任何问题,因为它在我尝试暴力时起作用。
我想要的结果是,当搜索函数返回true时,for循环将该单词添加到一个集合中,然后在程序完成后呈现给用户。
答案 0 :(得分:0)
这对我来说很好。以下是我的代码:
def binrSkning(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
以下是我的输出
>>> binrSkning('hi', ['hello', 'hi', 'how'])
True
>>> binrSkning('tim', ['hello', 'hi', 'how'])
False
以下对我来说很好:
>>> NewWordList = ['hello', 'hi', 'how']
>>> listOfWords = ['hi', 'how', 'bye']
>>> foundWords = set()
>>> for word in listOfWords:
if binrSkning(word, NewWordList):
foundWords.add(word)
>>> foundWords
set(['how', 'hi'])
答案 1 :(得分:0)
如果你有一个单词列表,就像制作单个if语句一样简单:
def bomrSkning(word, wordList):
found = False
if word in wordList:
found = True
return found