2016-09-20 65 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