我有一个~30个花车的清单。我想看看我的列表中是否有特定的浮点数。例如:
1 >> # For the example below my list has integers, not floats
2 >> list_a = range(30)
3 >> 5.5 in list_a
False
4 >> 1 in list_a
True
我的代码中的瓶颈是第3行。我搜索一个项目是否在我的列表中多次,我需要更快的替代方案。这个瓶颈占用了我99%的时间。
我能够通过设置list_a
而不是列表来加速我的代码。还有其他方法可以显着加快这条线的速度吗?
答案 0 :(得分:2)
如果列表未排序,检查元素是否在列表中的最佳时间是O(n),因为元素可能在任何地方,您需要查看每个项目并检查它是否是您要查找的内容
如果数组已排序,您可以使用二进制搜索来查找O(log n)查找时间。您还可以使用哈希映射来获得平均O(1)查找时间(或者您可以使用内置集,这基本上是一个完成相同任务的字典)。
但是对于长度为30的列表来说,这没有多大意义。
答案 1 :(得分:0)
根据我的经验,当我们在长列表中搜索某些内容时,Python确实会变慢。
为了补充上面的建议,我的建议将是列表的子集,当然只有当列表可以是子集并且查询可以容易地分配给正确的子集时。
示例是在英语词典中搜索单词,首先将词典子集化为26" ABCD"基于每个单词首字母的部分。如果查询是" apple",您只需要搜索" A"部分。这样做的好处是你大大限制了搜索空间,从而提高了速度。
对于数字列表,可以根据范围或第一个数字对其进行子集化。
希望这有帮助。