ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-26 17:44:09  阅读:361  来源: 互联网

标签:write f2 word 判别 变位 python value 单词 words


最近老师留了个作业,是对近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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有