当前位置: 首页 > 知识库问答 >
问题:

finding_anagrams函数不是创建anagrams字典

严阳夏
2023-03-14

我的finding_anagrams功能有问题。我想创建一个字典,它保存所有单词字谜的列表。sig变量是按字母顺序排列的单词的签名。字典采用for d={"word1":[word2, word3, word4],"word5":[word10, word9, word20]等...}输入文件包含英语单词列表

def get_signature(word):
    """takes a word breaks it into a list and sort it alph, and then
    back into a word
    """
    l = word.split()
    l.sort()    
    w = ''.join(l)
    return w    


def is_anagram(sig, word):
    """takes a given number of letters and compare to another 
    word to see if they are anagrams: must be same length
    """ 
    if len(word) != len(sig): #if words not same len return False
        print "here1"
        return False
    for ch in sig:
        if ch not in word:
            return False

    return True     


def finding_anagrams(fin):
    """Ex 12-4 this funcion reads a wordlist and find the words that makes up 
    the most anagrams
    """
    #read the wordlist file 
    d = {}
    for line in fin:
        word = line.strip().lower()
        sig = get_signature(word) #put the letters in alphabetical
        if sig not in d:
            d[sig] = []
        for l in fin:
            w = l.strip().lower()
            print w, sig, "here"
            if is_anagram(sig, w):
                d[sig].append(w)

    return d                    



def print_anagrams(number, d):
    """prints all anagrams of given word
    """
    for key, value in d.items():
        if len(key) == number:
            print key, d[key]

main()
    filein = open("words.txt")
    anagrams = finding_anagrams(filein)
    print_anagrams(5, anagrams) 


if __name__ == "__main__":
    main()

共有2个答案

杨飞飙
2023-03-14

您对文件对象进行了两次迭代,在第一次内部循环之后,您已经耗尽了迭代器。使用默认值会更有效,并且只需调用对单词排序也可以避免不必要的函数调用

def finding_anagrams(fin):
    """Ex 12-4 this funcion reads a wordlist and find the words that makes up
    the most anagrams
    """
    #read the wordlist file
    from collections import defaultdict
    d = defaultdict(list)
    lines = fin.readlines() # put in a list 
    for ind,line in enumerate(lines[:-1]):
        word = line.rstrip().lower()
        sig = "".join(sorted(word)) # this line does what get_signature does
        if any(is_anagram(sig, word.rstrip().lower()) for word in lines[ind+1:]): # check all words from current + 1 in the lines list 
            d[sig].append(word)
    return d

您还可以删除对is_anagram的需求,进而删除对sig的需求:

 if any(sorted(word) == sorted(w.rstrip().lower())) for w in lines[ind+1:])
甘君之
2023-03-14
import collections

def is_anagram(w1, w2):
    return collections.Counter(w1) == collections.Counter(w2)

def get_signature(word):
    return ''.join(sorted(word))

def find_anagrams(infilepath):
    answer = {}
    with open(infilepath) as infile:
        for line in infile:
            word = line.strip().lower()
            sig = get_signature(word)
            if sig not in answer:
                answer[sig] = set()
            answer[sig].add(word)
    return answer

def find_most_anagrams(infilepath):
    anagrams = find_anagrams(infilepath)
    most = max(anagrams, key=lambda k:len(anagrams[k]))
    print "The maximum number of anagrams are made with the letters", most, '.'
    print "The anagrams are:",
    print '\n\t'.join(anagrams[most])
 类似资料:
  • @adilooze解决方案

  • 进入工作空间,点击“创建新函数”,输入函数名称及相关配置信息。 默认运行环境为Python2,内存限制为128M,请注意修改。超时时间请填写1-300之间的任意数值,单位为s。环境变量以键值对形式填写,不填写则默认没有设置环境变量。 默认代码输入方式为在线编辑,示例代码如下: def main(event): return "Hello, world!\n" 创建成功后可以进入函数详情页

  • 问题内容: 问题:有没有办法使用字符串在python中 创建函数对象 ? 信息:我正在一个项目中,该项目将数据存储在sqlite3服务器后端中。没什么可疯狂的。DAL类通常是通过代码生成来完成的,因为代码是如此平凡。但这给了我一个主意。在python中找不到属性时,如果定义函数,它将在错误之前调用该函数。因此,我通过解析器和逻辑树来计算它的方式可以动态生成第一次调用时所需的代码,然后将函数对象另存

  • Anagrams 描述 Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be in lower-case. 分析 Anagram(回文构词法)是指打乱字母顺序从而得到新的单词,比如 "dormitory" 打乱字母顺序会变成 "dirty room" ,

  • 问题内容: 我目前有一个从mysql查询中使用json_encode的json,如下所示: 我怎样才能让json是帖子数组(“ post_2”,“ post_1”)而不是字典?JSON将在iPhone上使用SBJSON解码,并且必须将JSON制成后端的数组。 提前致谢。 问题答案: 为提供非关联数组。最简单的方法通常是简单地调用(关联)数组,并对结果进行编码。

  • 问题内容: 当我试图在React版本15.2.0中使用这两个函数时,我在代码中发现了一个问题,尽管如此,我找到了一种解决方法,但是我想知道是否有更好的解决方案。 因此,每当我尝试运行index.html文件时,都不会显示任何内容,但是控制台会出现第一个错误: React.render不是function 。我发现发生这种情况是因为新版本的React需要使用react-dom,即 现在问题已解决,但