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

对于“大家来找茬”这个游戏而言,小伙伴们肯定不会陌生,找茬游戏对于大家的耐心和细心是一个非常大的考验。对于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学习Q群:705933274,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值