• python字典的索引快速搜索方法比较


         闲话少叙,python中经常会对字典的索引进行搜索判断,如判断‘user’是否为{'user1':'New Student','user2':'Old student'}的索引,本文总结了5种方法进行索引的搜索,并比较了运行时间。
    五种方法有:
    ① index in dict.keys()
    ② dict.has_key(index)
    ③ index in dict
    ④ index in set(dict)
    ⑤ index in set(dict.keys())
    先构建一个程序运行时间的函数,用于测试。
    from time import clock as now
    def costTime(f, testDict, num, describe):
        start = now()
        f(testDict, num)
        finish = now()
        return 'The costing time of %s is %f' % (describe, finish - start)

    然后分别写出五个函数:
    #测试dict.keys()
    def test_dictKeys(testDict, num):
        for i in range(num):
            if i in testDict.keys():
                testDict[i]
               

    #测试dict.has_key()
    def test_has_key(testDict, num):
        for i in range(num):
            if testDict.has_key(i):
                testDict[i]

    #测试dict
    def test_dict(testDict, num):           
        for i in range(num):
            if i in testDict:
                testDict[i]

    #测试set
    def test_set(testDict, num):           
        tt = set(testDict)
        for i in range(num):
            if i in tt:
                testDict[i]

    #测试set_dictkeys
    def test_setDictKeys(testDict, num):
        tt = set(testDict.keys())
        for i in range(num):
            if i in tt:
                testDict[i]

    下面为主程序
    num = 50000
    #初始化字典
    test = dict()
    for i in range(num):
        test[i] = i-0.1
       
    print costTime(test_dictKeys, test,  num, 'dict.keys()')
    print costTime(test_has_key, test, num, 'dict.has_key()')
    print costTime(test_dict, test, num, 'in dict')
    print costTime(test_set, test, num, 'in set')
    print costTime(test_setDictKeys, test, num, 'set(dict.keys())')

    得到的结果为:
    The costing time of dict.keys() is 79.946342
    The costing time of dict.has_key() is 0.017616
    The costing time of in dict is 0.012359
    The costing time of in set is 0.015817
    The costing time of set(dict.keys()) is 0.016689

    从以上运行时间上,可以看出第三种方法是最快速的,第一种方法是最慢的,而且相差不是一星半点。究其原因,应该是dict.keys()得到的结果是有序 的list数据类型,而最后面三种是dict或者set类型,是无序的。但更深层次的解释,还需要继续深究。也请大神们赐教。



  • 相关阅读:
    JS获当前网页元素高度offsetHeight
    C-LODOP回调多个返回值On_Return_Remain
    JS的slice、substring、substr字符串截取
    【JS新手教程】JS修改css样式的几种方法
    Unity GUI(uGUI)使用心得与性能总结
    PDB文件:每个开发人员都必须知道的
    IEnumerable 使用foreach 详解
    Unity------Unity 脚本基类 MonoBehaviour 与 GameObject 的关系
    Unity5-----------之GI设置简介
    unity5x --------Music Mixer参数详解
  • 原文地址:https://www.cnblogs.com/AlgorithmDot/p/3283200.html
Copyright © 2020-2023  润新知