如何用Python删除具有前缀重复关系的行(保留最长连续前缀链的末尾行)

发布时间 - 2026-01-10 00:00:00    点击率:

本文介绍一种python脚本方法,用于识别并删除存在“逐行前缀包含”关系的重复行序列(如“this” → “this line” → “this line has”),仅保留每条链中最长的那行。

在文本处理中,有时我们需要清理“渐进式重复”的行——即后一行完全以前行内容为开头(前缀关系),形成类似嵌套的字符串链。例如:

This
This line 
This line has
This line has five
This line has five strings

目标不是去重(set去重只处理完全相同的行),而是识别这种前缀继承链,并仅保留每条链的最后一个(即最长)行。上述示例中,所有前4行都是第5行的真前缀,因此只输出第5行。

以下是一个健壮、简洁的实现方案:

infilename = "input.txt"  # 替换为你的输入文件路径

with open(infilename) as fin:
    # 读取所有行并去除换行符(避免因\n导致startswith判断失败)
    lines = list(map(str.rstrip, fin))

i = 0
while i < len(lines):
    # 向后扫描:只要下一行以当前行为前缀,就跳过当前行
    while i + 1 < len(lines) and lines[i + 1].startswith(lines[i]):
        i += 1
    # 此时lines[i]是当前前缀链的末端(最长行),输出它
    print(lines[i])
    i += 1

关键逻辑说明

  • 使用 str.startswith() 判断前缀关系,天然支持空字符串和边界情况;
  • 外层 while 遍历每一“链起点”,内层 while 快进至该链终点;
  • 每次循环只输出链尾,不输出中间任何前缀行。

⚠️ 注意事项

  • 输入行必须严格按前缀顺序排列(如示例所示)。若顺序混乱(如“This line has”出现在“This”之前),该算法将失效;如需鲁棒性更强的处理(如任意顺序下找最长非前缀子集),需改用排序+集合筛法,但复杂度上升;
  • rstrip() 是必需的——否则换行符会影响 startswith 判断;
  • 若需写入文件而非打印,将 print(lines[i]) 替换为 outfile.write(lines[i] + '\n') 即可(注意手动补回换行符)。

该方法时间复杂度为 O(n×m),其中 n 为行数、m 为平均行长度,适用于常规日志或配置文本清洗场景,简洁高效,无需额外依赖。


# python  # 排列  # python脚本 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 简单实现Android验证码  企业网站制作这些问题要关注  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  5种Android数据存储方式汇总  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  详解Huffman编码算法之Java实现  中国移动官方网站首页入口 中国移动官网网页登录  Android okhttputils现在进度显示实例代码  利用vue写todolist单页应用  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  无锡营销型网站制作公司,无锡网选车牌流程?  Laravel如何优化应用性能?(缓存和优化命令)  如何快速搭建高效简练网站?  如何在香港服务器上快速搭建免备案网站?  大同网页,大同瑞慈医院官网?  进行网站优化必须要坚持的四大原则  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何用免费手机建站系统零基础打造专业网站?  Firefox Developer Edition开发者版本入口  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Laravel怎么上传文件_Laravel图片上传及存储配置  晋江文学城电脑版官网 晋江文学城网页版直接进入  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  如何在服务器上三步完成建站并提升流量?  Laravel怎么使用artisan命令缓存配置和视图  香港服务器网站推广:SEO优化与外贸独立站搭建策略  网站制作软件免费下载安装,有哪些免费下载的软件网站?  用yum安装MySQLdb模块的步骤方法  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  如何在腾讯云服务器快速搭建个人网站?  网站建设要注意的标准 促进网站用户好感度!  Laravel如何使用Collections进行数据处理?(实用方法示例)  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  网易LOFTER官网链接 老福特网页版登录地址  常州企业网站制作公司,全国继续教育网怎么登录?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  Python进程池调度策略_任务分发说明【指导】  Python结构化数据采集_字段抽取解析【教程】  Linux系统命令中tree命令详解  如何在万网主机上快速搭建网站?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何选择PHP开源工具快速搭建网站?  🚀拖拽式CMS建站能否实现高效与个性化并存?