我有一个字符串列表 (~400K),其中最长的字符串有~220 个字符。字符串用“.”表示对象的路径 作为分隔符。
我正在尝试构建一个自动完成功能,允许用户快速从列表中选择对象,而不是输入其完整路径。
自动完成功能基于根据用户输入过滤数据库。
我尝试了以下方法。
使用filter- 基准测试为 ~0.8 秒
database = list()
database.append("path.to.first.object")
database.append("path.to.first.some.object.of.mine")
....
database.append("path.to.last.object") # ~430K items
partial_name = "som"
filtered_list = list(filter(lambda x: partial_name in x, database))
Run Code Online (Sandbox Code Playgroud)regex方法 - 基准为 ~0.15 秒
regex = re.compile(r"{0}".format(partial_name))
filtered_list = list(filter(regex.search, database))
Run Code Online (Sandbox Code Playgroud)以上预计只会产生path.to.first.some.object.of.mine对象
我还考虑了Trie数据结构,但这个不支持“正则表达式”类型的过滤。
有没有更快的方法来过滤字符串?