我需要定义一个名为find_anagrams(str)的函数,该函数返回dictionary.txt中所有单词的列表,这些单词是输入字符串的字谜。我已经有了一个代码,它从列表中返回字符串字符的单词。
def find_anagrams_in_word_list(str1,str_list):
anagrams = []
for word in str_list:
if len(word) == len(str1):
if (anagram(str1,word)):
anagrams.append(word)
print(word)
以及打开字典文件的代码
def get_dictionary_word_list():
with open('dictionary.txt') as f:
return f.read().split
如何将输入字符串和单词列表(get_dictionary_word_list)发送到find_anagrams_in_word_list以获得结果?
所以如果str是'advar'我希望它返回 'varad','davar','ravad'(假设它们在word文件中)
答案 0 :(得分:1)
我会创建一个名为isAnagram
的函数来检查某个单词本身是否是一个字谜。参数可以是原始单词,也可以是您正在测试的单词。
from collections import Counter
def isAnagram(original, test):
return Counter(original) == Counter(test)
测试此功能:
>>> isAnagram('basket', 'skabet')
True
现在我们可以在阅读时使用上述功能(假设dictionary.txt
中每行一个字)。参数可以是文件的路径,也可以是要查找字符的单词。
def getAnagramList(filename, original):
with open(filename) as f:
return [word for word in f if isAnagram(original, word)]
测试文件包含几个'basket'
>>> getAnagramList('dictionary.txt', 'basket')
['skabet', 'tebask', 'askbet']
答案 1 :(得分:0)
如同上一个问题中sorted(str1) == sorted(str2)
返回True
一样,你有一个字谜。使用文件的差别很小,您只需将文件拆分为单个单词,删除任何空格并再次使用列表推导进行比较:
def anagram(str1,str2):
return sorted(str1) == sorted(str2)
def find_anagrams(s,f):
with open(f) as f:
return [word.rstrip() for word in f if anagram(word.rstrip(),s)]
或使用您自己的代码:
def get_dictionary_word_list():
with open('dictionary.txt') as f:
return f.read().split() # need parens to call the split method
def anagram(str1,str2):
return sorted(str1) == sorted(str2)
def find_anagrams(s):
return [word for word in get_dictionary_word_list() if anagram(word,s)]
如果您使用split
,则不需要rstrip