相关文章推荐
酒量小的登山鞋  ·  33Vue - ...·  1 年前    · 
酒量大的数据线  ·  java 设置进程名 ...·  1 年前    · 
飘逸的野马  ·  报错:loaded more than 1 ...·  1 年前    · 

很多时候我们可能要频繁的进行元素的find 或in操作,本人一直天真的以为python的list做了hash,通过红黑树来高效查找···直到今天我真正来测试它和set,dict的查找效率时,才发现自已想太多了!!!!
先看代码:

__author__ = 'jmh081701'
import numpy
import  time
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
······

呵呵呵呵···list等了20分钟都没出结果。

所以···结果一览无余啊。

查找效率: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慢,不过差别不大。

so,如果是要频繁的查找,请使用set吧!

很多时候我们可能要频繁的进行元素的find 或in操作,本人一直天真的以为python的list做了hash,通过红黑树来高效查找···直到今天我真正来测试它和set,dict的查找效率时,才发现自已想太多了!!!! 先看代码:__author__ = 'jmh081701'import numpyimport timel=[]sl=set()dl=dict()r=numpy.ran 基于python2.7,不是完全完整,基于目前所学分析,后面有其他会补充,主要也是为了可观性; 关于时间复杂度,参考: · 英文:https://wiki.python.org/moin/TimeComplexity · 文:http://www.orangecube.net/python-time-complexity 近几年,python语言的流程程度可谓突飞猛进,特别是随着AI的兴起,python已经在2017年由“IEEE Spectrum”发布的语言排行榜,位居榜首。 我有一个坏毛病,没有对python语言进行系统的学习,很多封装的用法仍尚未熟悉。因此!!!经常以“写C++的思想来写pyhon”???什么意思呢,就是本来python已经封装好一些常见的函数,而且都是考虑过性能优化的,但我却经... [1, 2, 3, 4, 5, 6, 'd', 'f', 's'] 原理:set(a)将列表a转换为集合,集合是一个包含不重复元素的无序序列,然后再使用list将集合转换为列表 若要实现不改变原来顺序,则应再增加...
需求:[‘1:a’,’2:b’,’3:c’] 转换为 {‘1′: ‘a’,’3′: ‘c’,’2′: ”} 复制代码 代码如下:a = {}b = [‘1:a’,’2:b’,’3:c’]map(lambda x:a.setdefault(x.split(‘:’)[0], x.split(‘:’)[1]), b)print a{‘1’: ‘a’, ‘3’: ‘c’, ‘2’: ‘b’} 您可能感兴趣的文章:Python 字典(Dictionary)操作详解python两种遍历字典(dict)的方法比较python通过字典dict判断指定键值是否存在
文章目录前言listlist(用法)list(索引,切片,重复,连接,成员操作符,迭代)list(练习:用法)list(增,删,改,查)list(排序)list(练习:用户登陆系统)list(练习:栈)tupletuple(用法)touple(索引,重复,连接,成员操作符,迭代)tuple(练习:赋值,统计成绩)setset(用法)set(成员操作符,可迭代)set(集和)set(练习:去重)dictdict(用法)dict(成员操作符,迭代)dict(增,删,查)dict(练习:统计随机数)dict(练习:生成卡号)其他用法(最大最小,求和,枚举,zip,fromkeys)后记 Python内置了字典:dict的支持,dict全称dictionary,在其他语言也称为map,使用键-值(key-value)存储,具有极快的查找速度。 举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list: names = ['Michael', 'Bob', 'Tracy'] scores = [95, 75, 85] 给定一个名字,要查找对应的成绩,就先要在names找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。 如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查
什么是listsetdict comprehension? 这其实是python提供的遍历、筛选一个序列(如listsetdict元素的特殊语法,其本质为在for loop 对一个序列元素执行指定的操作,要实现一个comprehension语法,我们需要确定四个要素:目标序列,目标元素,遍历,筛选条件。 listsetdict comprehension 的用法 假设我们有一个list strings = ['list','set','dict','tuple'] 现在我们想得到另一个list,这个list只含有strings长度为4的字符串(‘list’和‘dic
2. 相关概念 2.1 定义 集合set是具有唯一元素的无序集合,它和列表很像,但它只能包含唯一的元素,同时需要注意的是集合是无序的,也就是说集合没有第一个、第二个元素之说,通常我们只是说集合是否含有这些元素。 2.2 用途 我们通常需要检测某个元素是否属于某个集合,举例:假设我们有一个列表list1 = [3,4,5,6],如果我们需要检查该列表是否包