微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:从子字符串列表中快速搜索文本的有效子字符串

如何解决Python:从子字符串列表中快速搜索文本的有效子字符串

我需要一种快速有效的方法来从许多模式字符串的列表中搜索模式字符串,这些模式字符串是字符串的有效子字符串。

条件 -

  1. 我有一个以特定序列(已知)添加100 个模式字符串 的列表。
  2. 测试用例文件大小为 35 GB,并且在后续文件中包含长字符串 线

询问 -

我必须遍历文件,对于每一行,我必须搜索匹配的模式字符串,该字符串是该行的有效子字符串(以 100 个模式字符串列表中的第一个为准)。

示例 -

pattern_strings = ["地球又大又圆","地球是圆的","火星很小"]

测试用例文件内容 - 在所有行星中,地球是圆的,火星是小的。

...

...

因此对于第一行,索引 1 处的字符串应符合条件。

目前,我正在尝试进行线性搜索 -

def search(line,list_of_patterns):
    for pat in list_of_patterns:
        if pat in line:
            return pat
        else:
            continue
    return -1

当前运行时间为 21 分钟。目的是进一步减少它。需要建议!

解决方法

我知道的一个技巧,尽管它与更改现有代码无关,但尝试使用 PyPy 而不是标准 CPython 解释器运行您的代码。这可能是一种可以显着加快执行速度的技巧。

https://www.pypy.org/features.html

由于我自己安装并使用过,所以我可以告诉你,安装相当简单。

如果您不想更改代码,这是一种选择。

另一个建议是对您的代码进行计时或使用分析器来查看瓶颈所在以及花费相对较长时间的内容。

代码方面,您可以避免 for 循环并尝试以下方法:https://betterprogramming.pub/how-to-replace-your-python-for-loops-with-map-filter-and-reduce-c1b5fa96f43a

最后一个选择是用更快、更高效的语言(例如 C++)编写那段代码,然后从 Python 调用该 .exe(如果在 Windows 上)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。