python – 如何使用difflib.SequenceMatcher获取多个匹配项?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何使用difflib.SequenceMatcher获取多个匹配项?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1786字,纯文字阅读大概需要3分钟。
内容图文
![python – 如何使用difflib.SequenceMatcher获取多个匹配项?](/upload/InfoBanner/zyjiaocheng/795/2c961da678614380ad84145184fddea6.jpg)
我使用difflib来识别较长序列中短字符串的所有匹配项.但是,当有多个匹配时,difflib似乎只返回一个:
> sm = difflib.SequenceMatcher(None, a='ACT', b='ACTGACT')
> sm.get_matching_blocks()
[Match(a=0, b=0, size=3), Match(a=3, b=7, size=0)]
我预期的输出是:
[Match(a=0, b=0, size=3), Match(a=0, b=4, size=3), Match(a=3, b=7, size=0)]
事实上,字符串ACTGACT包含两个ACT匹配,位于0和4位,大小为3(在字符串末尾加上另一个大小为0的匹配).
我怎样才能获得多场比赛?我期待difflib返回两个位置.
解决方法:
正如Jerry指出的那样,k-nut正确回答,你使用了错误的算法来解决你的问题.
老实说k-nut的答案并不是那么糟糕,但它并不是解决这类问题最有效的方法.
我是一名生物信息学家并且给出了您的问题和示例案例,看起来非常像您正在尝试解决“我们的”经典DNA序列比对/搜索问题(请参阅由Altschul或“Gene”Myers等科学超级明星撰写的scientific literature如果您对细节感兴趣并希望阅读有史以来被引用次数最多的论文之一,那就是问题所在.
在有效的长段数据库中查找短段正是Altschul现在着名的BLAST算法启发式解决和/或可以使用Smith-Waterman进行精确查找.
在Python中执行此操作的最有效方法可能是使用BioPython,特别是,您可能希望查看描述如何设置local NCBI BLAST+ instance的部分.
如果你没有与Python“结婚”,那么今天的BLAST实现速度更快,比如FSA-BLAST.
另一方面,如果你需要精确的匹配(而不是BLAST的启发式),如果你不介意长查询时间并且有一个小的参考序列(在你的例子中是B),你可能会这样.与官方史密斯 – 沃特曼(SW)对齐.如果没有,并且您仍需要完全匹配,则首先过滤与BLAST匹配,然后使用候选的SW对齐减少您的设置.
您可以在纯Python中实现SW,甚至只使用任何现有的纯Python实现,但我只建议这条路径纯粹用于教育目的(例如,在GitHub上查看swalign).如果你想要一个相当强大的基于Python的实现,请查看scikit-bio的SW对齐,尽管scikit-bio仍然处于alpha状态.但首先要阅读上面已经链接过的SW WikiPedia page,根据你的硬件,你可能会在CUDA或C++使用GPU或至少SIMD优化的实现.如果你想要一个带有Python包装的漂亮版本,请检查淘汰SSWlib.
内容总结
以上是互联网集市为您收集整理的python – 如何使用difflib.SequenceMatcher获取多个匹配项?全部内容,希望文章能够帮你解决python – 如何使用difflib.SequenceMatcher获取多个匹配项?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。