Logo
新闻分类
教育目的IOS
行业资讯 您现在的位置:首页 > 教育网 > 文章

Python入门学习 深入 Python 字典并学习其内部实现

发布时间:2019-06-12  阅读:100次   字号:  

  人民行使国家政权的机关为各级人民代表大会和各级人民政府。

  作者简介    冯唐,1971年生于北京,诗人、作家、商人。  1998年,获协和医科大学临床医学博士  2000年,获美国埃默里大学MBA学位  2000-2008年,麦肯锡公司全球董事合伙人  2009-2014年,华润医疗集团创始CEO  2015年始,从事医疗投资  已出版作品  长篇小说《欢喜》《十八岁给我一个姑娘》《万物生长》《北京,北京》《不二》《女神一号》  短篇小说集《安阳》《搜神记》  散文集《活着活着就老了》《三十六大》《在宇宙间不易被风吹散》《无所畏》  诗集《冯唐诗百首》《不三》  译著《飞鸟集》编辑推荐◆如果你在人群中感到格格不入,一定要读《局外人》!◆诺贝尔文学奖得主加缪的代表作!法国存在主义文学代表作,法国荒诞哲学代表作,文学史上的不朽名作!◆在人类文学史上,《局外人》以其独特的视角展示了世界的荒诞性,成为二十世纪整个西方文坛具有划时代意义的伟大作品。局外人也由此成为整个西方文学/哲学中至为经典的人物形象和至为重要的关键词之一。

Python入门学习  深入 Python 字典并学习其内部实现

在以下的篇幅中,我们仅考虑用字符串作为键的情况。 在Python中,用于处理字符串的哈希函数是这样定义的:arguments:stringobjectreturns:hashfunctionstring_hash:ifhashcached:returnitsetlentostringslengthinitializevarppointingto1stcharofstringobjectsetxtovaluepointedbypleftshiftedby7bitswhilelen=0:setvarxto(1000003*x)xorvaluepointedbypincrementpointerpsetxtoxxorlengthofstringobjectcachexasthehashsowedontneedtocalculateitagainreturnxasthehash如果在Python中运行hash(a),后台将执行string_hash()函数,然后返回12416037344(这里我们假设采用的是64位的平台)。 如果用长度为x的数组存储键/值对,则我们需要用值为x-1的掩码计算槽(slot,存储键/值对的单元)在数组中的索引。

这可使计算索引的过程变得非常迅速。 字典结构调整长度的机制(以下会详细介绍)会使找到空槽的概率很高,也就意味着在多数情况下只需要进行简单的计算。 假如字典中所用数组的长度是8,那么键a的索引为:hash(a)7=0,同理b的索引为3,c的索引为2,而z的索引与b相同,也为3,这就出现了冲突。

可以看出,Python的哈希函数在键彼此连续的时候表现得很理想,这主要是考虑到通常情况下处理的都是这类形式的数据。 然而,一旦我们添加了键z就会出现冲突,因为这个键值并不毗邻其他键,且相距较远。 当然,我们也可以用索引为键的哈希值的链表来存储键/值对,但会增加查找元素的时间,时间复杂度也不再是O(1)了。

下一节将介绍Python的字典解决冲突所采用的方法。

开放寻址法(Openaddressing)开放寻址法是一种用探测手段处理冲突的方法。

在上述键z冲突的例子中,索引3在数组中已经被占用了,因而需要探寻一个当前未被使用的索引。

增加和搜寻键/值对需要的时间均为O(1)。 搜寻空闲槽用到了一个二次探测序列(quadraticprobingsequence),其代码如下:。

教育目的提供的文章均由网友转载于网络,若本站转载中的文章侵犯了您的权益,请与本站管理员联系.
Copyright (C) 2013-2019 www.33588y.com教育目的_儿童教育 All Rights Reserved.