我正在尝试打印出给定列表中的字谜。我无法得出正确的答案。我想知道我哪里出错了,我该怎么办呢。
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 :(得分: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']]
答案 1 :(得分:0)
首先,你应该为每个单词添加一个不同的列表,而不是一个带有任意内容的大列表。让我们尝试使用词典:
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案件会污染你的结果。
答案 2 :(得分:0)
要在给定列表中查找字谜:
strs=['bat', 'rats', 'god', 'dog', 'cat', 'arts', 'star'] liste=[]
sonuc=[]
anagrams=[]
for i in strs:
if sorted(i) not in liste:
liste.append(sorted(i))
for i in range(len(liste)):
sonuc.append([k for k in strs if sorted (k)==liste[i]]) anagrams.append([i for i in sonuc if len(i)>=2])
print(anagrams)
[[['rats', 'arts', 'star'], ['god', 'dog']]]