我正在尝试使用python进行匹配。
我有一个字符串列表(len~3000)和一个文件,我想检查文件中的每一行是否至少有一个字符串。
最直接的方法是逐个检查,但这需要时间(虽然不长)。
有没有办法让我搜索得更快?
例如:
list = ["aq", "bs", "ce"]
if the line is "aqwerqwerqwer" -> true (since has "aq" in it)
if the line is "qweqweqwe" -> false (has none of "aq", "bs" or "ce")
Tags:
您可以使用^{} 和generator expression:
上面的代码将测试
lst
中的任何项是否可以在line
中找到。如果是,将运行# Do stuff
。请参见下面的演示:
对于将正则表达式引擎与自动创建的正则表达式一起使用,这实际上是一个很好的用例。
尝试:
正则表达式将比简单的线性扫描每个字符串来匹配每一行更快。这有两个原因:正则表达式是用C实现的,正则表达式被编译成一个状态机,它只检查每个输入字符一次,而不是像在一个天真的解决方案中那样多次。
请参阅IPython笔记本中的比较:http://nbviewer.ipython.org/gist/liori/10170227。测试数据由3000个字符串组成,与100万行的列表相匹配。天真的方法在我的机器上花了1分46秒,而这个解决方案只有9.97秒
您可以使用itertools.groupby:
如果模式都是单个字符串,则可以使用一组:
这将导致
(除了它是一个生成器,而不是一个列表)这是它的主要逻辑。下面是一种迭代经过预处理的生成器生成输出的方法。
相关问题 更多 >
编程相关推荐