2016-12-07 94 views
2

我按字母順序排列的話,比如你好= ehllo的列表L 我怎麼檢查這個詞「blanagrams」,這是與除大多都是類似字母的單詞例如,樂團變成了樂團。我只能想到這一部分。我有一個想法,你必須測試當前單詞的每一個字母,看看它是否與之相對應,如果是這樣,它是一個僞造詞並創建一個字典,但我很努力地把它寫入代碼如何檢查是否一個字符串的信件是在另一個

L = [list of alphabetically ordered strings] 

for word in L: 

    for letter in word: 
     #confused at this part 
+2

一個更好的主意是使用不會阻止順序的結構\對象,比如'sets'來檢查你的表達式。檢查'set(hello)'和'set(ehllo)'的交集比試圖重組字符以從一個字到另一個字更容易。但'sets'不允許重複條目,所以要小心。 –

+1

首先,你需要兩個詞來比較,但你的代碼只有一個,到目前爲止。另外,你不需要檢查每個單詞,不同長度的單詞會自動失敗,正確嗎?然後,您只需比較兩個單詞,直到找到兩個不匹配的字母。 – CAB

+0

這是AI中常用的梯子游戲的一部分嗎? 你是否試圖用相鄰節點創建一個圖作爲可能的單詞而不是字典?闡述你的問題。 –

回答

0

假設這是類似於AI中常用的梯子游戲的一部分,你正在試圖創建與儘可能詞,而不是一個字典相鄰節點的曲線圖。

d = {} 
# create buckets of words that differ by one letter 
for word in L: 
    for i in range(len(word)): 
     bucket = word[:i] + '_' + word[i+1:] 
     if bucket in d: 
      d[bucket].append(word) 
     else: 
      d[bucket] = [word] 
+1

目前,我有一個名爲N的字典,如 「'acehorrst」= [「orchestra」,「carthorse」]我正在考慮做的事情,比較字典鍵,這是「 acehorsst「與我的字典中的其他鍵。如果除了一個字母以外的所有字母都相同,則創建一個新的字典,其中「acehorsst」將是關鍵字,除了一個字符以外的字詞是相同的值,並且可能有多個字符話。問題是,我無論如何都在努力做到這一點。 –

+0

現在檢查編輯後的版本。 –

+0

與我的名單約250萬字,這需要非常長的時間。我有一個程序,它已經找到了anagrams。我在其中解釋了「acehorrst」= [「orchestra」,「carthorse」],所以我正在考慮製作一個函數(例如blanagram(word,anagram),其中anagram是像「acehorrst」= [「orchestra 「,」carthorse「]爲250萬字,單詞是用戶的輸入,因此,我正在考慮做」單詞中的字母「,然後用一個新的字母替換每個字母,看看哪些單詞可以形成 –

2
from collections import Counter 
def same_except1(s1, s2): 
    ct1, ct2 = Counter(s1), Counter(s2) 
    return sum((ct1 - ct2).values()) == 1 and sum((ct2 - ct1).values()) == 1 

例子:

>>> same_except1('hello', 'hella') 
True 
>>> same_except1('hello', 'heela') 
False 
>>> same_except1('hello', 'hello') 
False 
>>> same_except1('hello', 'helloa') 
False 
2

史蒂芬Rumbalski的回答讓我想到還有還有另一種方式,你可以用一個計數器(+1用於收藏的做到這一點,謝謝你激起我的利息)

from collections import Counter 
def diff_one(w,z): 
    c=Counter(sorted(w+z)).values() 
    c=filter(lambda x:x%2!=0,c) 
    return len(c)==2 

基本上所有匹配的字母將有一個計數器值將是偶數。所以你把它們過濾出來,留下無與倫比的。如果你有超過2個不匹配,那麼你有一個問題。

相關問題