如何定义一个函数,该函数返回文件中所有单词的列表,这些单词是python中输入字符串的字谜

时间:2014-11-16 16:59:13

标签: python string function python-3.3

我需要定义一个名为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文件中)

2 个答案:

答案 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