社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

牛逼,Python3竟然内置找茬神器!一起来找茬吧!

菜鸟学Python • 4 年前 • 566 次点击  

点上方“菜鸟编程大本营”,选择“星标

原创干货,第一时间送达

对于“大家来找茬”这个游戏而言,小伙伴们肯定不会陌生,找茬游戏对于大家的耐心和细心是一个非常大的考验。对于python程序来说,也会遇到类似于找茬游戏的问题。例如寻找两个列表中不同的元素内容。

好在python3中存在一个内置库,来帮助我们解决该类问题,今天,小编就为大家介绍这个小巧但是却十分好用的python3内置库——difflib


01.difflib 库介绍

difflib 库是python3的一个内置库,因此大家不需要通过pip来进行安装,直接就可以在程序中调用difflib 库,并进行使用。


02.difflib 的使用
那么difflib库有哪些方面的应用呢?我们通过以下的四个实际应用中常见的问题进行展开。
  • 寻找两个列表中不同的元素
  • 准确指示元素间的差异
  • 进行准确度的匹配
  • 字符串转换

1).寻找两个列表中不同的元素

在实际的应用中,经常会遇到找到两个列表中不同的元素,如果列表元素少的话,我们可以通过人工的方式进行筛查,但是如果元素较多,我们可以通过下图的程序进行筛查。

上图程序中,通过两个for循环来筛查两个列表中的元素,互相筛查出来两个列表中的不同元素内容。difflib 可以利用一行程序来实现上述的功能,并且在结果的输出中更加美观。

程序通过调用difflib 库的context_diff函数,一行代码便可以给两个列表进行“找茬”处理。在结果的展示中,可以看到,context_diff函数输出的结果更加的清晰明确,***1,5***中,1和5表示的是传入第一个列表中的元素而在第二个列表中不存在。

同时在元素前面利用叹号进行标定。无论从程序的编写还是结果的展示方面,difflib 库都给出了很好的解答。


2).准确指示元素间的差异

前面的操作还只是简单的筛查出来,不同列表之间元素的区别,difflib 还能够更进一步,直接找到不同元素之间的差异性,如下图所示:

上图中,通过ndiff函数来寻找两个列表中,不同英文单词的细节差异,输出结果中,-号表示的是在第一个列表中存在,但是在第二个列表中没有的元素,+号表示在第一个列表中不存在,但是在第二个列表中存在的元素。
对比peak和peek,可以发现,第三个元素是不相同的,因此在结果中通过^号来指出存在差异的字母位置。


3).进行准确度的匹配

让我们更进一步的来对difflib 库进行探索,利用准确度匹配的方式来寻找最接近的单词。在日常的程序编写过程中,大家可能会将main不小心的写为mian。利用difflib 库中的get_close_matches函数,可以纠正这样的错误输入,如下图所示:

上述程序中,通过get_close_matches函数,可以匹配得到与mian最为接近的单词是main。get_close_matches函数中给出的cutoff参数,控制着匹配的严格程度,它的值介于0到1之间,cutoff的值越大,表示匹配程度越严格,如果设置为1时,则必须单词完全一致才能匹配,否则就会返回空列表。利用get_close_matches函数,可以完成单词之间相似度的匹配。


4).字符串转换

无论在实际的应用,抑或是笔试算法的考察中,都会遇到一类问题,就是字符串的转换问题,例如,如何将字符串“welcome to python program"转换成”welcome to follow python subscription“。利用difflib库中的SequenceMatcher类,就可以完成字符串的转换。

上图的程序中,通过调用SequenceMatcher类来完成将字符串str1转换成str2的过程,其中action对应的是对于str1的操作动作,equal表示两个字符串相同,不用改变,insert表示在str1中进行插入,replace表示字符串的替换,位置表示需要改变的字符串的位置。按照输出结果的指示进行操作,就可以将str1转换为str2。


03.总结
以上内容就是小编今天为大家带来的关于difflib 库的内容分享,在日常的学习中,difflib库可以帮助我们快速的进行列表内容的查重,单词的更改和替换。
提升开发效率,大家可以按照上面的内容,更加深入的学习difflib库的内容。
欢迎大家在留言区吱一声,觉得今天的分享内容有用的话,记得给个三连哦!


推荐阅读:

入门: 最全的零基础学Python的问题  |  零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径


干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |


趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!


AI:  会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影


年度爆款文案





    

点阅读原文,领廖雪峰大佬的资料包!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/111413
 
566 次点击