如何提高python中巨大列表的搜索性能?

问题描述 投票:0回答:1

我有一个巨大的技能列表,我在这个列表中循环搜索目标技能,如下图所示。

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。

python loops search
1个回答
3
投票

你可以使用一组交集来实现

>>> skillset = set(tokens).intersection(skills)
>>> skillset     
{'php', 'java'}

1
投票

一个简单的解决方案如下。

tokenset = set(tokens)
skillset = [s for s in skills if s in tokenset]

如果 skillset 不一定要符合顺序,在 skills,你可以简单地做。

skillset = set(akills) & set(tokens)

这将返回一个 set 名为 skillset,你可能想将其转换为 list 如果你需要做除顺序访问和成员测试以外的任何事情。

两种解决方案的运行时间都与较大值集的大小成正比。第二种解决方案可能更快,因为它有一组固定的 Python 指令要执行。

© www.soinside.com 2019 - 2024. All rights reserved.