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,因为它不会浪费时间在散列上。非常感谢您的回复