Python 3:如何在范围对象中查找比在列表中查找更快?

时间:2018-07-12 06:56:07

标签: python python-3.x list lookup xrange

当我在range对象中查找的answers中遇到一个常量时间操作时,我在StackOverflow上浏览了很多列表和范围相关的问题!在O(1)中如何做到这一点没有意义,您将不得不遍历该范围以查看是否存在数字。范围对象是否像某些hashmap / dictionary一样工作?

def usingRange(x):
    return x in range(0, 100000000)
print(usingRange(9999999)) 


def noRange(x):
    return x in list(range(0, 100000000))
print(noRange(9999999))

%timeit usingRange(9999999)
%timeit noRange(9999999)

我得到的输出为:

True
True
443 ns ± 8.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
6.89 s ± 380 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

我想知道其恒定时间的原因是因为

  1. 有人告诉我不要过于专注于在Python中进行编程面试学习“技巧”!因为您所做的所有事情,您都将不得不解释时间的复杂性,所以您要么记住i in list1是O(N),要么使用for循环遍历列表:

    for j in range(len(list1)):
        if list1[j] == i:
            print(True)
    
    else:
        print(False)
    

,然后得出结论,实际上它是O(N),因为要检查元素是否存在,您必须遍历列表的每个元素,直到列表结尾(最坏的情况)。但是一些固定时间的操作似乎不太明显!我可以接受这样一个事实,即哈希表中的循环为O(1),因为存在一个称为哈希的大概念(尚未遍历它),但不确定它如何用于range对象。

  1. 有人告诉我,了解基本知识至关重要!并尽力解释每一行的内容以及为什么要在白板上书写。我认识的一个人实际上是在为一家非常著名的技术公司的SWE职位实施HASHMAP。

  2. 我有很多时间(1年)来准备并且对事物有疑问。

0 个答案:

没有答案
相关问题