【问题标题】:Understanding the runtime difference of list vs dict了解 list 与 dict 的运行时差异
【发布时间】:2017-06-14 13:19:46
【问题描述】:

我正在为我的考试而学习,偶然发现了这个:

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

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 in d,其中 d 是字典并使用哈希),为什么?我认为哈希使一切都为 O(1),所以它们应该相等。

谢谢。

【问题讨论】:

  • 在 3 中你只检查键和值不比较

标签: python list dictionary runtime python-3.5


【解决方案1】:

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

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也会更快

【讨论】:

  • 我不完全理解你所说的“检查键而不是值”是什么意思,但是,我对函数进行了计时:f1 - ~0.10704922676086426 秒 f2 - ~674.6455340385437 秒 f3 - ~0.11258125305175781 秒 f1 和f3 不同......在每次迭代中,我想他们希望我们说 f1 因为它不会在散列上浪费时间。非常感谢您的回复
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 2015-12-02
  • 1970-01-01
  • 2010-10-17
相关资源
最近更新 更多