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

python判断是否为变位词_[python]变位词的判别与分类相关推荐

  1. python判断队列是否为空_[python模块]队列queue

    一.队列queue 队列queue 多应用在多线程场景,多线程访问共享变量. 对于多线程而言,访问共享变量时,队列queue的线程安全的. 因为queue使用了一个线程锁(pthread.Lock() ...

  2. python判断是不是整数的命令_介绍python判断一个数是不是正小数和整数的方法

    这篇文章主要介绍了python 判断是否为正小数和正整数的实例的相关资料,这里提供实例,实例注释说明很清楚,需要的朋友可以参考下 python 判断是否为正小数和正整数的实例 实现代码: def ch ...

  3. python判断质数用for循环_Day3.Python判断与循环语句

    Python判断与循环语句!!! 例题引导: Q:输入3个整数,按从小到大依次输出,用"->"符号相连: 例如:输入4,2,6,输出2 -> 4 -> 6 A: ...

  4. python判断输入数字大于0,对python 判断数字是否小于0的方法详解

    对python 判断数字是否小于0的方法详解 为了精度更准确 可以使用数字的绝对值 < 1.0e-16  或者 < 1.0e-8来对比 abs(Num) 以上这篇对python 判断数字是 ...

  5. python中for循环的用法_@Python小白,一文让你掌握Python爬虫

    兴趣 我没事喜欢逛知乎,有一段时间看到了这个问题:利用爬虫技术能做到哪些很酷很有趣很有用的事情: http://t.cn/RptGOPx 觉得回答的一个个炒鸡酷炫 就对爬虫产生了浓厚的兴趣, 于是就开 ...

  6. python打开excel执行vba代码_“Python替代Excel Vba”系列(终):vba中调用Python

    请关注本号,后续会有更多相关教程. 系列文章 学Python还不会处理Excel数据?带你用pandas玩转各种数据处理"Python替代Excel Vba"系列(二):panda ...

  7. python c++情侣网名含义_#python和C/C++#让python和C/C++联姻

    让python不在孤单,轻易而举的为python写C/C++第三方库. 我们都知道python很慢,特别是处理大数据的时候,简直慢到极致,如果在知道代码的瓶颈的时候,可以将需要大量计算的数据块放在C/ ...

  8. python爬虫项目实战教学视频_('[Python爬虫]---Python爬虫进阶项目实战视频',)

    爬虫]---Python 爬虫进阶项目实战 1- Python3+Pip环境配置 2- MongoDB环境配置 3- Redis环境配置 4- 4-MySQL的安装 5- 5-Python多版本共存配 ...

  9. python三维图如何标注曲面_(python)使用colormap作为第4维,x,y,z函数绘制3d曲面 - python...

    我正在尝试绘制3d曲面,其中三个维度中的每个维度都在单独的值数组中,并且每个坐标处的曲面着色是x,y,z的函数.一种numpy.pcolormesh,但是是4D而不是3D的. 3D图由下式给出: fr ...

最新文章

  1. for循环console输出结果的问题
  2. 兼容ie9以下css3,hover和圆角(htc)
  3. css a 标签上下间距_CSS实用技能:去除inline-block元素间间距的7种方法
  4. android 创建选项卡,Android用Fragment创建选项卡
  5. java 依赖算法_java – Maven 2 – 从传递依赖版本定义依赖版本
  6. 基于Redis的分布式锁实现
  7. SQL SERVER 数据库如何限制一列不能重复(已经有主键)
  8. android--在命令行中生成Android的数字证书keystore文件
  9. 修改Maven本地仓库的位置 方法
  10. matlab getsplitpic,MATLAB_9-模式识别笔记
  11. 【❤️万字长文总结❤️】一篇学会Redis高可用✔集群✔搭建详细教程
  12. stm32f407 串口干扰采集_无线采集又添新伙伴,蓝牙无线采集来助力
  13. html文件form根目录,HTML ,form 和 link 使用根目录 的问题,我已经上图了!
  14. 数据中心节能制冷系统分析
  15. 链表的基本操作——学生信息管理表
  16. JAVA经纬度互转、计算工具类
  17. 链路追踪译文学习记录(Dapper!!!非原创!!!学习记录)
  18. 为什么没有Realtek面板?
  19. matlab 错误使用*
  20. C++词法记号规则之标识符 关键字 操作符 分隔符 空白符

热门文章

  1. 凸包问题-Graham-Scan算法-python实现
  2. 解决tomcat正常启动但是对应的网页却无法访问
  3. 【附源码】Python计算机毕业设计宁夏旅游信息管理系统
  4. yarn : 无法加载文件 ...Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本
  5. 2022-2028全球COB摄影灯行业调研及趋势分析报告
  6. 蓝桥杯算法训练-24点(Python)
  7. Spring Boot 所有文件下载,图片下载加水印
  8. oracle当查询没有输出返回0,[数据库] Oracle单表查询总数及百分比和数据横向纵向连接...
  9. Auto.js制作蓝奏软件库app
  10. APP加密,ios代码混淆工具,虚拟化技术 适用于移动应用程序的虚拟化加密软件