我有一个巨大的技能列表,我在这个列表中循环搜索目标技能,如下图所示。
skillset = []
for skill in skills:
if skill in tokens:
skillset.append(skill)
下面是 技巧 有所有的技能,我正在搜索每个技能在 代币(我想搜索的),如果找到了,就在另一个列表中附加技能集的值。
它工作得很好,但花费的时间太多。
所以,有谁能帮帮我,如何提高搜索性能?
假设skills = [java, sql, python, php] and tokens =['i','know','java','and','php','is','good,'language']。
现在我需要从tokens中只获取java和php,为此我在技能数据中搜索每个token以获取php和java。
技能列表有15k条记录,而tokens有许多带有技能的token。
你可以使用一组交集来实现
>>> skillset = set(tokens).intersection(skills)
>>> skillset
{'php', 'java'}
一个简单的解决方案如下。
tokenset = set(tokens)
skillset = [s for s in skills if s in tokenset]
如果 skillset
不一定要符合顺序,在 skills
,你可以简单地做。
skillset = set(akills) & set(tokens)
这将返回一个 set
名为 skillset
,你可能想将其转换为 list
如果你需要做除顺序访问和成员测试以外的任何事情。
两种解决方案的运行时间都与较大值集的大小成正比。第二种解决方案可能更快,因为它有一组固定的 Python 指令要执行。