Python、嵌套循环、匹配和性能

2023-12-24

我正在尝试使用 Python 2.7 和 Levenshtein 函数将姓氏列表与全名列表进行匹配。为了减少工作量,我仅在第一个字母相同的情况下进行匹配(尽管这似乎在性能方面没有太大差异)。如果找到匹配项,则将从全名中删除匹配的单词(以使后续的名字匹配更容易)。 两个列表都包含数万个条目,因此我的解决方案相当慢。在不解析全名的情况下如何加快速度? 这是我到目前为止所得到的(对于姓氏由多个单词组成的情况,我省略了一些 if 条件):

import Levenshtein

listoflastnames=(['Jones', 'Sallah'])
listoffullnames=(['Henry', 'Jones', 'Junior'],['Indiana', 'Jones'])


def match_strings(lastname, listofnames):
    match=0
    matchedidx=[]
        for index, nameelement in enumerate(listofnames):        
            if lastname[0]==nameelement [0]:
                if Levenshtein.distance(nameelement, lastname)<2:
                    matchedidx.append(index)
                    match=match+1
    if match==1:
        newnamelist = [i for j, i in enumerate(listofnames) if j not in matchedidx]
    return 1, newnamelist 
return 0, listofnames



for x in listoflastnames:
    for y in listoffullnames:
        match, newlistofnames=match_strings(x,y)
        if match==1:
            #go to first name match...

任何帮助,将不胜感激!

更新:与此同时,我使用了多处理模块来让我的所有 4 个核心而不是仅一个核心来处理该问题,但匹配仍然需要很多时间。


这简化了for循环中match_string功能,但在我的测试中并没有明显提高速度。最大的损失在于两个for循环使用姓氏和全名。

def match_strings(lastname, listofnames):
    firstCaseMatched = [name for name in listofnames if lastname[0] == name[0]]
    if len(firstCaseMatched):
        matchedidx = [index for index, ame in enumerate(firstCaseMatched) if Levenshtein.distance(lastname, name) < 2]
        match = len(matchedidx)
    else:
        match = 0
    if match == 1:
        newnamelist = [i for j, i in enumerate(listofnames) if j not in matchedidx]
        return 1, newnamelist
    return 0, listofnames

您可能需要对已知姓氏列表进行排序,将它们分成dict对于每个起始字符。然后将名称列表中的每个名称与该名称进行匹配。

假设全名列表始终将名字作为第一个元素。您可以将比较限制为仅与其他元素进行比较。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python、嵌套循环、匹配和性能 的相关文章

随机推荐

  • 尝试从 Eclipse 到 Android Studio 执行 Android 应用程序时出现异常

    我尝试将 Eclipse Android 项目迁移到 Android Studio 我尝试了两种方法 直接从 Android Studio 打开并先迁移到 Eclipse 中的 Gradle 然后在 Android Studio 中打开它
  • EPPlus 的通用 Excel 生成器函数

    如何为 LINQ 查询构建通用 EPPlus 电子表格函数 更新 该需求专门针对 ASP NET MVC 应用程序 我所做的只是创建一个接受列表的通用函数 我使用反射来获取属性列表 这将成为我们的列标题 最后 我只是让 EPPlus 完成所
  • 是否可以在 Google Apps 脚本中执行 ImportRange?

    我今天一直在玩 Google Apps 脚本 并尝试编写一些自定义电子表格函数 我已经进行了一些搜索 但找不到我的查询的答案 我知道在 Google 电子表格上 您可以在电子表格的单元格中使用 ImportRange 如下所示 Import
  • 使用 foreach 迭代 IQueryable 会导致内存不足异常

    我正在使用 foreach IQueryable 和 LINQ to SQL 迭代一个小型 10GB 表 看起来像这样 using var conn new DbEntities CommandTimeout 600 100 var dta
  • Kubernetes NGINX 入口重写目标注释破坏

    我正在 Windows 的 docker 桌面下运行 kubernetes v1 16 我已经使用 helm 安装了 nginx ingress 控制器 v1 7 9 我已更新我的主机文件以包含以下条目 127 0 0 1 applicat
  • 使用 @font-face 在 IE 中显示无样式内容的 Flash

    我正在开发一个网站 该网站使用 Open Sans 字体作为正文 并使用 Font Squirrel 生成的 EOT SVG WOFF 和 TTF 字体文件和样式表 我首先将字体 CSS 包含在页面标题中 但是 当我在 IE7 IE8 甚至
  • 我可以清除托管对象上下文吗?

    问题 我正在进行一次非常大的导入 其中解析了一个 XML 文件 对于每 10 个解析的托管对象 我想保存托管对象上下文并删除内存中的这 10 个对象 这样内存中的对象永远不会超过 10 个 保存后 如何清除上下文以便所有对象都从内存中消失
  • 获取 MD5 和 SHA-1

    我正在寻求一些帮助来在我的 iPhone 应用程序中获取 MD5 和 SHA 1 有人可以告诉我如何获得这些吗 include
  • 汇编:32 位寄存器的 64 位乘法

    我有一个关于 x86 汇编中 64 位乘法的实现的问题 我已经发布了我能够理解的代码 我不知道其余的人在做什么 而且我可能在我已经做过的事情中犯了错误 任何方向将不胜感激 dest at ebp 8 x at ebp 12 y at ebp
  • HTML 5 响应式 Canvas 中的鼠标位置

    我搜索过其他问题 但没有一个适合我的情况 我有一个画布元素
  • 使用 Swift 在 iOS WKWebview 中捕获 Javascript 事件

    我正在使用网络编程语言构建一个应用程序 并希望在用户单击 HTML 按钮时启动相机 由于我希望我的相机视图是自定义的 因此我需要使用 Swift 进行设计 因此 当用户单击此 HTML 按钮时 我想在 Swift 中 捕获 此单击 以便可以
  • 如何从 GAC 中提取程序集?

    我必须处理一个包 它将程序集直接安装到 GAC 中 例如 位于 windows assembly 深处的某个位置 如何将实际程序集 DLL 从 GAC 转移到普通文件系统中 Thanks 我使用了来自的建议本文 http blogs msd
  • 使用 iOS 6 UITableView dequeueReusableCellWithIdentifier:forIndexPath 时设置 UITableViewCell 的样式:

    我正在尝试弄清楚如何设置UITableViewCellStyle当使用 iOS 6 中的新方法时UITableView 以前 当创建UITableViewCell我会改变UITableViewCellStyle调用时使用枚举创建不同类型的默
  • 如何将我的 koa 路线分割成单独的文件?

    我正在尝试找出如何将我的路线分成单独的文件 到目前为止我已经有了这个 但它不起作用 我刚刚得到Not found当我尝试访问时http localhost 3001 api things server js var koa require
  • 循环赛分组名单组合

    编辑 我的问题并不像有人标记的那样重复 另一个问题是不正确的 甚至不起作用 我尝试了几种方法对 itertools combinations 的结果进行分组 但无法得出正确的输出 在游戏中创建比赛需要它 每支球队每天都需要比赛 但仅限一次
  • 计算机视觉:提取有关给定轮廓的形状的信息(例如尖的、圆形的......)

    给定线条和顶点形式的形状的 2D 轮廓 如何从中提取信息 比如 尖的 圆的 直线 形状与给定形状的相似度 代码不是必需的 我更感兴趣 涉及的概念和技术名称 指导我的搜索 提前致谢 影像瞬间 一种方法是计算二维轮廓所描述的形状的一阶和二阶中心
  • 全文搜索:Whoosh Vs SOLR

    我正在开发一个 Django 项目 我需要在其中实现全文搜索 我看过 SOLR 并发现了一些很好的评论 但由于它是用Java实现的 需要在系统上安装java环境和Python 在寻找 SOLR 的 python 等效项时 我见过 Whoos
  • 将 scala 代码概括为函数

    所以我最近不小心写了一个Scala问题的Haskell答案 由于对 Haskell 相当熟悉 解决方案对我来说很容易 myMaxBy a gt a gt Ordering gt a gt a myMaxBy undefined myMaxB
  • 在 BigQuery 中流式传输数据

    在 BigQuery 中流式传输数据后 新数据仅在表中可用一段时间 因为我刷新页面数据消失了 但我仍然可以查询 主要问题是每次我关闭选项卡并再次从存储访问它时可以看到表中的数据 但当我刷新页面时 它又消失了 数据在表中 有时你会看到这样的消
  • Python、嵌套循环、匹配和性能

    我正在尝试使用 Python 2 7 和 Levenshtein 函数将姓氏列表与全名列表进行匹配 为了减少工作量 我仅在第一个字母相同的情况下进行匹配 尽管这似乎在性能方面没有太大差异 如果找到匹配项 则将从全名中删除匹配的单词 以使后续