问题描述
我需要一种快速有效的方法来从许多模式字符串的列表中搜索模式字符串,这些模式字符串是字符串的有效子字符串。
条件 -
询问 -
我必须遍历文件,对于每一行,我必须搜索匹配的模式字符串,该字符串是该行的有效子字符串(以 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 上)。