python世界-迈出第九步-Set/Dict/List

Python 中list ,set,dict的大规模查找效率

'''

查找效率:set>dict>list

单次查询中:看来list 就是O(n)的;而set做了去重,本质应该一颗红黑树(猜测,STL就是红黑树),复杂度O(logn);
dict类似对key进行了hash,然后再对hash生成一个红黑树进行查找,其查找复杂其实是O(logn),并不是所谓的O(1)。
O(1)只是理想的实现,实际上很多hash的实现是进行了离散化的。dict比set多了一步hash的过程,so 它比set慢,不过差别不大。

原文链接:https://blog.csdn.net/jmh1996/article/details/78481365

set()
因为每存一个值到set里时, 都要先经过hash,然后通过得出的这个hash值算出应该存在set里的哪个位置,存的时候会先检查那个位置上有没有值
,有的话就对比是否相等,如果相等,则不再存储此值。 如果不相等(即为空),则把新值 存在这。


链接:https://www.jianshu.com/p/70c98a096488

数据结构:
list: 线性链表
dict: hash算法
'''
import numpy
import time

l = []
sl = set()
dl = dict()
r = numpy.random.randint(0, 10000000, 100000)
for i in range(0, 100000):
    l.append(r[i])
    sl.add(r[i])
    dl.setdefault(r[i], 1)
# 生成3种数据结构供查找,常规的list,集合sl,字典dl.里面的元素都是随机生成的,为什么要随机生成元素?这是防止某些结构对有序数据的偏向导致测试效果不客观。

start = time.clock()
for i in range(100000):
    t = i in sl
end = time.clock()
print("set:", end - start)
# 计算通过set来查找的效率
start = time.clock()
for i in range(100000):
    t = i in dl
end = time.clock()
print("dict:", end - start)
# 计算通过dict的效率
start = time.clock()
for i in range(100000):
    t = i in l
end = time.clock()
print("list:", end - start)
# 计算通过list的效率

set: 0.01762632617301519
dict: 0.021149536796960248

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值