Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 理解list与dict的运行时差异_Python_List_Dictionary_Runtime_Python 3.5 - Fatal编程技术网

Python 理解list与dict的运行时差异

Python 理解list与dict的运行时差异,python,list,dictionary,runtime,python-3.5,Python,List,Dictionary,Runtime,Python 3.5,我正在准备考试,突然发现: 问题是:哪个算法是最快的,哪个算法是最慢的 def f1(): a = [] for j in range(100000): a.append(j*j) for j in range(100000): if 99999*j == a[j]: print("yes") def f2(): a = [] for j in range(100000): a.ap

我正在准备考试,突然发现:

问题是:哪个算法是最快的,哪个算法是最慢的

def f1():
    a = []
    for j in range(100000):
        a.append(j*j)

    for j in range(100000):
        if 99999*j == a[j]:
            print("yes")
def f2():
    a = []
    for j in range(100000):
        a.append(j*j)

    for j in range(100000):
        if 99999*j in a:
            print("yes")
def f3():
    d = {}
    for j in range(100000):
        d[j] = j*j

    for j in range(100000):
        if 99999*j in d:
            print("yes")
我知道f2最慢的,因为要检查一个项目是否在列表中,您需要检查列表中的所有成员

哪个跑得更快?布尔表达式:(99999*j==a[j])或(99999*j在d中,其中d是字典并使用散列)以及为什么?我认为哈希使所有的值都为O(1),所以它们应该相等


谢谢。

现在在案例3中没有编辑,您只需检查键而不是值,这可能是错误的。如果你像这样编辑它

def f3():
    d = {}
    for j in range(100000):
        d[j] = j*j
    for j in range(100000):
        if d[j] == 99999*j:
            print("yes")

然后函数1也会更快

在3中,您只需检查键和值,不进行比较我不完全理解“检查键而不是值”的含义,但是,我对函数计时:f1-~0.10704922676086426秒f2-~674.6455340385437秒f3-~0.11258125305175781秒f1和f3不同。。。在每次迭代中,我想他们都希望我们说f1,因为它不会浪费时间在散列上。非常感谢您的回复