Python中in和has_key的性能比较

Python中in和has_key的性能比较

  最近写了一个代码中需要判断一个字典D是否包含某个键值item,然后我使用了if item in D:,结果发现耗时很严重,于是改成if D.has_key(item),速度马上变快了很多。查阅了一些资料后,发现有一种说法是has_key是python2保留的api,在python3中已经被删去,一般用if item in D。因此决定继续探索这三种用法的的性能差别。

时间消耗对比

  对字典大小为100到10000的字典分别使用in Din D.keys()has_key判断键值是否存在,记录它们的时间消耗,并画出图形,代码如下。

import time
from matplotlib import pyplot as plt

n = 10000
time1 = []
time2 = []
time3 = []
for n in range(100,10100,100):
    my_dict = {}
    for i in range(n):
        my_dict[i] = i

    start = time.time()
    for i in range(n):
        if i in my_dict.keys():
            pass
    end = time.time()
    print end - start
    time1.append(end - start)

    start = time.time()
    for i in range(n):
        if my_dict.has_key(i):
            pass
    end = time.time()
    print end - start
    time2.append(end - start)

    start = time.time()
    for i in range(n):
        if i in my_dict:
            pass
    end = time.time()
    print end - start
    time3.append(end - start)

t = range(100,10100,100)
plt.plot(t, time1, label='in keys()')
plt.plot(t, time2, label='has_key')
plt.plot(t, time3, label='in')
plt.legend()
plt.show()

这里写图片描述
这里写图片描述

  可见D.has_key要比in D.keys()快得多,而in DD.has_key要稍微快一点。

结论

  在判断一个值item是否是某个字典D的键值时,最佳的方法是if item in D,它是最快的,其次的选择是if D.has_key(item),绝对不要使用if itme in D.keys()

猜你喜欢

转载自blog.csdn.net/songbinxu/article/details/80360542
今日推荐