2016-05-13 12 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ケースを渡す。

関連する問題