我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python3如何实现列表模糊匹配列表

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python3如何实现列表模糊匹配列表

Python3列表模糊匹配列表

B列表模糊匹配A列表

a = ['123','666','355']
b = ['2','5']
for i in range(len(b)):
    for j in range(len(a)):
        if a[j].find(b[i]) == -1:
            continue
        print(a[j])

执行结果:

在这里插入图片描述

Python 模糊匹配搜索问题

利用python库:fuzzywuzzydifflib,两个库均可实现词粒度的模糊匹配,同时可设定模糊阈值,实现关键词的提取、地址匹配、语法检查等

fuzzywuzzy

pip install fuzzywuzzy
 
from fuzzywuzzy import process
from fuzzywuzzy import fuzz

fuzzy模块

(1)模糊匹配方法

  • ratio()——简单匹配,使用纯Levenshtein Distance进行匹配。
  • partial_ratio()——非完全匹配,基于最佳的子串(substrings)进行匹配
  • token_set_ratio——忽略顺序匹配,对字符串进行标记(tokenizes)并在匹配之前按字母顺序对它们进行排序 
  • token_set_ratio——去重子集匹配,对字符串进行标记(tokenizes)并比较交集和余数 

(2)实例

ratio() 简单匹配

fuzz.ratio("河南省", "河南省")
>>> 100
 
fuzz.ratio("河南", "河南省")
>>> 80

partial_ratio() 非完全匹配

fuzz.partial_ratio("河南省", "河南省")
>>> 100
 
fuzz.partial_ratio("河南", "河南省")
>>> 100

token_set_ratio() 忽略顺序匹配

fuzz.ratio("西藏 自治区", "自治区 西藏")
>>> 50
fuzz.ratio('I love YOU','YOU LOVE I')
>>> 30
 
fuzz.token_sort_ratio("西藏 自治区", "自治区 西藏") 
>>> 100
fuzz.token_sort_ratio('I love YOU','YOU LOVE I') 
>>> 100

token_set_ratio() 去重子集匹配

fuzz.ratio("西藏 西藏 自治区", "自治区 西藏")
>>> 40
 
fuzz.token_sort_ratio("西藏 西藏 自治区", "自治区 西藏")
>>> 80
 
fuzz.token_set_ratio("西藏 西藏 自治区", "自治区 西藏")
>>> 100

process模块

(1) extract提取多条数据

类似于爬虫中select,返回的是列表,其中会包含很多匹配的数据

choices = ["河南省", "郑州市", "湖北省", "武汉市"]
process.extract("郑州", choices, limit=2)
>>> [('郑州市', 90), ('河南省', 0)]
# extract之后的数据类型是列表,即使limit=1,最后还是列表,注意和下面extractOne的区别

(2)extractOne提取一条数据

提取匹配度最大的结果,返回 元组 类型, 还有就是匹配度最大的结果不一定是我们想要的数据,可以通过下面的示例和两个实战应用体会一下

process.extractOne("郑州", choices)
>>> ('郑州市', 90)
 
process.extractOne("北京", choices)
>>> ('湖北省', 45)

difflib

Difflib作为python的标准库,difflib模块提供的类和方法用来进行序列的差异化比较,它能够比对文件并生成差异结果文本或者html格式的差异化比较页面,而且支持输出可读性比较强的HTML文档

(0)get_close_matches(word, possibilities, n=3, cutoff=0.6)

import difflib
config_list = ['中国工商银行','中国农业银行','建设银行','中国人民银行','招商证券','中国农业发展银行']
query_word = '农行'
 
res = difflib.get_close_matches(query_word, config_list, 1, cutoff=0.5)
print(res)
>>>['中国农业银行']

扩展——文件比较

(1)difflib.Differ

此类比较的是文本行的差异并且产生适合人类阅读的差异结果或者增量结果,结果中各部分的表示如下:

(2)difflib.HtmlDiff

make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])
 
make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

 此类可以被用来创建HTML表格 (或者说包含表格的html文件) ,两边对应展示或者行对行的展示比对差异结果。以上两个方法都可以用来生成包含一个内容为比对结果的表格的html文件,并且部分内容会高亮显示。

(3)context_diff

difflib.context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])

比较a与b(字符串列表),并且返回一个差异文本行的生成器

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...     sys.stdout.write(line)  
*** before.py
--- after.py
***************
*** 1,4 ****
! bacon
! eggs
! ham
  guido
--- 1,4 ----
! python
! eggy
! hamster
  guido

(4) 比对两个文件,然后生成一个展示差异结果的HTML文件

import difflib
hd = difflib.HtmlDiff()
file1 = ''
with open('xxx1.py','r') as load:
    file1 = load.readlines()
    load.close()
 
file2 = ''
with open('xxx2', 'r') as mem:
    file2 = mem.readlines()
    mem.close()
 
with open('htmlout.html','a+') as fo:
    fo.write(hd.make_file(file1,file2))
    fo.close()

总结:difflib多用于文本的差异比较,用于模糊匹配精度还是不太准的,一般词的模糊匹配可用fuzzywuzzy

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python3如何实现列表模糊匹配列表

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何进行Python pandas两个表格内容模糊匹配的实现

如何进行Python pandas两个表格内容模糊匹配的实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、方法2此方法是两个表构建某一相同字段,然后全连接,
2023-06-25

python3怎么操作redis实现List列表

本篇内容主要讲解“python3怎么操作redis实现List列表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python3怎么操作redis实现List列表”吧!目录下面是具体例子详解和代码
2023-06-20

vue如何实现列表固定列滚动

这篇文章主要介绍了vue如何实现列表固定列滚动的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue如何实现列表固定列滚动文章都会有所收获,下面我们一起来看看吧。功能介绍:在移动端开发中,会用到列表作为信息展示方
2023-07-02

jQuery如何在元素上获取匹配的元素列表?

jQuery获取匹配元素列表jQuery提供了多种方法来获取匹配元素列表,基于CSS选择器从文档中选择元素。可用的方法包括:$(selector):选择文档中匹配选择器的元素filter(selector):从现有jQuery对象中过滤元素find(selector):从匹配元素中查找内部元素children(selector):选择直接子元素siblings(selector):选择兄弟元素next(selector):选择紧邻的下一个元素prev(selector):选择紧邻的上一个元素closest
jQuery如何在元素上获取匹配的元素列表?
2024-04-02

java如何实现反转列表

可以使用递归或迭代的方式来实现反转链表。递归方式:class ListNode {int val;ListNode next;ListNode(int val) {this.val = val;}}public class Solut
2023-10-22

python如何实现列表推导

这篇文章主要为大家展示了“python如何实现列表推导”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何实现列表推导”这篇文章吧。列表推导已知一个列表,刷选出偶数列表方法:numbe
2023-06-05

AmazeUI如何实现评论列表

这篇文章主要介绍AmazeUI如何实现评论列表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!AmazeUI 评论列表的实现示例:
2023-06-09

react如何实现列表排序

今天小编给大家分享一下react如何实现列表排序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react实现列表排序的方法:
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录