我有一个字符串列表(~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))
regex
逼近 - 基准到~0.15秒
regex = re.compile(r"{0}".format(partial_name))
filtered_list = list(filter(regex.search, database))
上述内容预计只会产生path.to.first.some.object.of.mine
对象
我还考虑了Trie
数据结构,但这个数据结构不支持“正则表达式”过滤。
是否有更快的方法来过滤字符串?