zoukankan      html  css  js  c++  java
  • 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类型,是无序的。但更深层次的解释,还需要继续深究。也请大神们赐教。



  • 相关阅读:
    POJ 1061
    LightOJ 1104
    扩展欧几里得算法
    2015 HUAS Summer Trainning #5 E
    2015 HUAS Summer Trainning #5 C
    2015 HUAS Summer Trainning #5 B
    2015 HUAS Summer Trainning #5 A
    2015 HUAS Summer Trainning #4 D
    2015 HUAS Summer Trainning #4 C
    2015 HUAS Summer Trainning #4 B
  • 原文地址:https://www.cnblogs.com/AlgorithmDot/p/3283200.html
Copyright © 2011-2022 走看看