V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yangmt92
V2EX  ›  问与答

python dict 和 list 的速度问题

  •  
  •   yangmt92 · 2016-12-29 13:40:08 +08:00 · 2997 次点击
    这是一个创建于 2685 天前的主题,其中的信息可能已经有所发展或是发生改变。

    初学 python 我不能理解 dict 为什么比 list 快

    比如 list[5]是从头遍历 那么 dict['key']不是对 key 的遍历吗

    10 条回复    2016-12-29 14:32:56 +08:00
    polo2222
        1
    polo2222  
       2016-12-29 13:50:14 +08:00
    dict['key']不是对 key 的遍历。

    python dict 的实现使用了 hash 表, access 的复杂度是 O(1)。
    justfly
        2
    justfly  
       2016-12-29 14:03:45 +08:00
    list[5] 也不是遍历 也是 O(1)
    justfly
        3
    justfly  
       2016-12-29 14:05:02 +08:00
    ps 只有链表随机读才需要从头遍历
    BOYPT
        4
    BOYPT  
       2016-12-29 14:05:28 +08:00
    先问是不是,再问为什么系列
    kfll
        5
    kfll  
       2016-12-29 14:08:58 +08:00
    楼主理解的不对,是查询表上, dict 会比 list 快,你可以类比一下数据库有索引和没有索引的情况。

    https://wiki.python.org/moin/TimeComplexity

    应该比较 list 的 x in s 和 set 的 x in s 或者 dict 的 Get Item
    yangmt92
        6
    yangmt92  
    OP
       2016-12-29 14:18:48 +08:00
    @kfll 对,我是这个意思。刚刚看了一下哈希初步明白了。 dict 的 x in s 是 position = f(key),O(1)。 list 的 x in s ,O(N)
    jugelizi
        7
    jugelizi  
       2016-12-29 14:21:19 +08:00
    dict 就是查字典的意思嘛,你按索引查字典和一页一翻你说哪个快
    yangmt92
        8
    yangmt92  
    OP
       2016-12-29 14:23:55 +08:00
    @polo2222 多谢提醒哈希
    yangmt92
        9
    yangmt92  
    OP
       2016-12-29 14:30:52 +08:00
    @jugelizi 又有一点迷惑了,到底是一个 f(x)生成,还是索引,字典索引相当根据特征于分类查询
    yangmt92
        10
    yangmt92  
    OP
       2016-12-29 14:32:56 +08:00
    @jugelizi 不过还是快,可能我需要了解一下 dict 或者哈希实现
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1026 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:16 · PVG 03:16 · LAX 12:16 · JFK 15:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.