编程语言
首页 > 编程语言> > [python]变位词的判别与分类

[python]变位词的判别与分类

作者:互联网

最近老师留了个作业,是对近12万的单词进行变位词的判断与分类,最开始博主按着非常普通的想法,先写了个函数来判断两个单词是不是变位词,然后再对所有单词遍历判别。因为单词数量实在是多,所以运行时间很长。所以就改变了一下思路(看了同学的code):
首先也是遍历所有单词,不同的是,需要将每个单词的字母顺序排列,存为一个字符串(记为字典的键,对应的值为一个列表,列表中存放互为变位词的所有单词)。
然后对每一单词,如果这个单词对应的顺序字母串存在于字典的键中,则把这个单词加到键对应的值(列表)中;
若是这个单词对应的顺序字母串不存在于字典的键中,则这个单词也添加到键对应的值(列表)中。
所以最后的字典是这样的一种形式:键为顺序字母串,值为一个列表,该列表至少含有一个单词。
附上近12万单词的txt文件
code:

# -*- coding: utf-8 -*-
"""
Created on Sat Oct 26 16:45:50 2019

@author: buu
"""
def find_anagram():
    filename1="words.txt"
    filename2="anagrams.txt"
    max_group=0
    max_word=0
    words_dict={}  # 键为按顺序排列的字母:值为一个列表,列表含有互为变位词的单词
    with open(filename1) as f1:
        words=f1.readlines()
        for word in words:
            a=list(word.strip())
            a.sort()
            s=''
            for cha in a:
                s+=cha
            if s not in words_dict.keys():
                words_dict[s]=[]
                words_dict[s].append(word.strip())
            else:
                words_dict[s].append(word.strip())
    b=[]
    lgroup=0
    lword=0
    cnt=0
    with open(filename2,'w') as f2:
        for value in words_dict.values():
            if len(value)>1:
                cnt+=1
                for word in value:
                    if len(word)>lword:
                        lword=len(word)
                if(len(value)>lgroup):
                    lgroup=len(value)
                f2.write(str(value).replace('[','').replace(']','').replace('\'',''))
                f2.write('\n')
        f2.write('\n')
        f2.write('=== anagrams 组的统计信息 ===\n')
        f2.write('There are {0} anagram groups in the dictionary.\n'.format(cnt))
        f2.write('max_group={0},max_word={1}.\n'.format(lgroup,lword))
        f2.write("组长度为{0}的 max_group 的组如下:\n".format(lgroup))
        for value in words_dict.values():
            if len(value)==lgroup:
                f2.write(str(value).replace('[','').replace(']','').replace('\'',''))
                f2.write('\n')
        f2.write("单词长度为 {0} 的组如下:\n".format(lword))
        for value in words_dict.values():
            if len(value)>1 and len(value[0])==lword:
                f2.write(str(value).replace('[', '').replace(']', '').replace('\'', ''))
                f2.write('\n')


if __name__ == '__main__':
    find_anagram()

然后将结果输出到某个txt文件中,结果如下:
在这里插入图片描述
在这里插入图片描述
end

标签:write,f2,word,判别,变位,python,value,单词,words
来源: https://blog.csdn.net/weixin_44321080/article/details/102758432