2016-05-13 40 views
-3

我試圖列出給定列表中的anagrams。我無法得出正確的答案。我想知道我哪裏出了問題,我該如何解決。如何在給定列表中找到anagrams

words = ['bat', 'rats', 'god', 'dog', 'cat', 'arts', 'star'] 
sort_words = [] 
anagrams = [] 
for word in words: 
    word.split() 
    word = ' '.join(sorted(word)) 
    sort_words.append(word) 

for i in range(len(sort_words)): 
    for j in range(len(sort_words)): 
     if sort_words[i] == sort_words[j]: 
      anagrams.append(sort_words[i]) 

print anagrams 
+0

您的預期和實際產出是多少? –

+0

什麼不起作用?你的代碼目前做什麼,你不指望? – Sayse

+0

你期望'sorted_words'包含什麼?它實際上包含什麼? –

回答

1

這裏是一個修正版本

words = ['bat', 'rats', 'god', 'dog', 'cat', 'arts', 'star'] 
sort_words = {} 
for word in words: 
    sort_words[word] = ''.join(sorted(word)) 

print sort_words 
anagrams = [] 
for i in range(len(words)): 
    ana = [words[i]] 
    for j in range(i + 1, len(words)): 
     if sort_words[words[i]] == sort_words[words[j]]: 
      ana.append(words[j]) 
    if len(ana) != 1: 
     anagrams.append(ana) 

print anagrams 

它輸出:

[['rats', 'arts', 'star'], ['god', 'dog'], ['arts', 'star']] 
0

那麼首先你應該有每個單詞,而不是一個大名單,在everithing不同的名單讓我們嘗試用一個字典:

words = ['bat', 'rats', 'god', 'dog', 'cat', 'arts', 'star'] 
sort_words = [] 
anagrams = {} 
for word in words: 
    word.split() 
    word = ''.join(sorted(word)) 
    sort_words.append(word) 

for i in range(len(sort_words)): 
    word_anagram = [] 
    for j in range(len(sort_words)): 
     if i == j: 
      continue 
     if sort_words[i] == sort_words[j]: 
      word_anagram.append(words[j]) 
    anagrams[words[i]] = word_anagram 
print anagrams 

輸出:

{'bat': [], 'rats': ['arts', 'star'], 'god': ['dog'], 'arts': ['rats','star'], 'dog': ['god'], 'star': ['rats', 'arts'], 'cat': []} 

你也忘了重要的一點:通過i == j的情況下,污染你的結果。

相關問題