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
python判断是否为变位词_[python]变位词的判别与分类相关推荐
- python判断队列是否为空_[python模块]队列queue
一.队列queue 队列queue 多应用在多线程场景,多线程访问共享变量. 对于多线程而言,访问共享变量时,队列queue的线程安全的. 因为queue使用了一个线程锁(pthread.Lock() ...
- python判断是不是整数的命令_介绍python判断一个数是不是正小数和整数的方法
这篇文章主要介绍了python 判断是否为正小数和正整数的实例的相关资料,这里提供实例,实例注释说明很清楚,需要的朋友可以参考下 python 判断是否为正小数和正整数的实例 实现代码: def ch ...
- python判断质数用for循环_Day3.Python判断与循环语句
Python判断与循环语句!!! 例题引导: Q:输入3个整数,按从小到大依次输出,用"->"符号相连: 例如:输入4,2,6,输出2 -> 4 -> 6 A: ...
- python判断输入数字大于0,对python 判断数字是否小于0的方法详解
对python 判断数字是否小于0的方法详解 为了精度更准确 可以使用数字的绝对值 < 1.0e-16 或者 < 1.0e-8来对比 abs(Num) 以上这篇对python 判断数字是 ...
- python中for循环的用法_@Python小白,一文让你掌握Python爬虫
兴趣 我没事喜欢逛知乎,有一段时间看到了这个问题:利用爬虫技术能做到哪些很酷很有趣很有用的事情: http://t.cn/RptGOPx 觉得回答的一个个炒鸡酷炫 就对爬虫产生了浓厚的兴趣, 于是就开 ...
- python打开excel执行vba代码_“Python替代Excel Vba”系列(终):vba中调用Python
请关注本号,后续会有更多相关教程. 系列文章 学Python还不会处理Excel数据?带你用pandas玩转各种数据处理"Python替代Excel Vba"系列(二):panda ...
- python c++情侣网名含义_#python和C/C++#让python和C/C++联姻
让python不在孤单,轻易而举的为python写C/C++第三方库. 我们都知道python很慢,特别是处理大数据的时候,简直慢到极致,如果在知道代码的瓶颈的时候,可以将需要大量计算的数据块放在C/ ...
- python爬虫项目实战教学视频_('[Python爬虫]---Python爬虫进阶项目实战视频',)
爬虫]---Python 爬虫进阶项目实战 1- Python3+Pip环境配置 2- MongoDB环境配置 3- Redis环境配置 4- 4-MySQL的安装 5- 5-Python多版本共存配 ...
- python三维图如何标注曲面_(python)使用colormap作为第4维,x,y,z函数绘制3d曲面 - python...
我正在尝试绘制3d曲面,其中三个维度中的每个维度都在单独的值数组中,并且每个坐标处的曲面着色是x,y,z的函数.一种numpy.pcolormesh,但是是4D而不是3D的. 3D图由下式给出: fr ...
最新文章
- for循环console输出结果的问题
- 兼容ie9以下css3,hover和圆角(htc)
- css a 标签上下间距_CSS实用技能:去除inline-block元素间间距的7种方法
- android 创建选项卡,Android用Fragment创建选项卡
- java 依赖算法_java – Maven 2 – 从传递依赖版本定义依赖版本
- 基于Redis的分布式锁实现
- SQL SERVER 数据库如何限制一列不能重复(已经有主键)
- android--在命令行中生成Android的数字证书keystore文件
- 修改Maven本地仓库的位置 方法
- matlab getsplitpic,MATLAB_9-模式识别笔记
- 【❤️万字长文总结❤️】一篇学会Redis高可用✔集群✔搭建详细教程
- stm32f407 串口干扰采集_无线采集又添新伙伴,蓝牙无线采集来助力
- html文件form根目录,HTML ,form 和 link 使用根目录 的问题,我已经上图了!
- 数据中心节能制冷系统分析
- 链表的基本操作——学生信息管理表
- JAVA经纬度互转、计算工具类
- 链路追踪译文学习记录(Dapper!!!非原创!!!学习记录)
- 为什么没有Realtek面板?
- matlab 错误使用*
- C++词法记号规则之标识符 关键字 操作符 分隔符 空白符
热门文章
- 凸包问题-Graham-Scan算法-python实现
- 解决tomcat正常启动但是对应的网页却无法访问
- 【附源码】Python计算机毕业设计宁夏旅游信息管理系统
- yarn : 无法加载文件 ...Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本
- 2022-2028全球COB摄影灯行业调研及趋势分析报告
- 蓝桥杯算法训练-24点(Python)
- Spring Boot 所有文件下载,图片下载加水印
- oracle当查询没有输出返回0,[数据库] Oracle单表查询总数及百分比和数据横向纵向连接...
- Auto.js制作蓝奏软件库app
- APP加密,ios代码混淆工具,虚拟化技术 适用于移动应用程序的虚拟化加密软件