2016-09-20 61 views
-2

我有一个字符串的排列的列表,以及一个完整的从词汇的单词列表。我想为每个排列找出它是否在单词列表中。我尝试了一段时间的循环,只是蛮横的通过,这给了我一堆单词列表中的单词。但是,当我尝试这样做的二进制搜索:在字符串列表一串二进制搜索

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

我已经更新了一点更多的解释。 – Olof

+0

这是第一个 - 也是最后一次 - 我已经看到了函数名中的diaereses。我很惊讶它甚至有效!为了良好的秩序,也许坚持非重音字母:)。 –

回答

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']) 
+0

适用于我,但是当我插入真实的东西时,它什么都不做,只能告诉我假。我没有改变,但这不起作用。 – Olof

+0

你能分享你插入的东西吗? – Jeril

+0

我已经更新了一些更多的解释。 – Olof

0

如果你有一个单词列表,它是作为简单做一个if语句如下:

def bomrSkning(word, wordList): 
    found = False 
    if word in wordList: 
     found = True 
    return found 
+0

是的,但单词列表大约是20000个单词,所以不需要一些时间才能完成? – Olof

+0

你有没有以某种方式订购单词以更快找到它们?如果不是,我找不出更快的方法 – Jalo

+0

单词列表按字母顺序组织,如果有帮助的话,单词列表并不重要,他们进来时的顺序是什么 – Olof