当前位置: 首页 > news >正文

亚马逊品牌网站怎么做广东网站开发收费

亚马逊品牌网站怎么做,广东网站开发收费,wordpress数据表更换域名,做乐高肖像的网站字典 dict 上一章我们介绍了哈希表#xff0c;其实 python 内置的 dict 就是用哈希表实现的#xff0c;所以这一章实现 dict 就非常简单了。 当然 cpython 使用的是 c 语言实现的#xff0c;远比我们写的复杂得多 (cpython/Objects/dictobject.c)。 上一章我们用 python 自…字典 dict 上一章我们介绍了哈希表其实 python 内置的 dict 就是用哈希表实现的所以这一章实现 dict 就非常简单了。 当然 cpython 使用的是 c 语言实现的远比我们写的复杂得多 (cpython/Objects/dictobject.c)。 上一章我们用 python 自己写的一个 Array 来代表定长数组然后用它实现的 HashTable它支持三个最基本的方法 add(key ,value): 有 key 则更新否则插入get(key, defaultNone): 或者 key 的值不存在返回默认值 Noneremove(key): 删除一个 key这里其实不是真删除而是标记为 Empty 字典最常使用的场景就是 k,v 存储经常用作缓存它的 key 值是唯一的。 内置库 collections.OrderedDict 还保持了 key 的添加顺序其实用我们之前实现的链表也能自己实现一个 OrderedDict。 实现 dict ADT 其实上边 HashTable 实现的三个基本方法就是我们使用字典最常用的三个基本方法 这里我们继承一下这个类 然后实现更多 dict 支持的方法items(), keys(), values()。不过需要注意的是在 python2 和 python3 里这些方法 的返回是不同的python3 里一大改进就是不再返回浪费内存的 列表而是返回迭代器你要获得列表必须用 list() 转换成列表。 这里我们实现 python3 的方式返回迭代器。 class DictADT(HashTable):pass视频里我们将演示如何实现这些方法并且写单测验证正确性。 Hashable 作为 dict 的 key 必须是可哈希的也就是说不能是 list 等可变对象。不信你在 ipython 里运行如下代码 d dict() d[[1]] 1 # TypeError: unhashable type: list我引用 python 文档里的说法大家可以自己理解下 An object is hashable if it has a hash value which never changes during its lifetime (it needs a __hash__() method), and can be compared to other objects (it needs an __eq__() or __cmp__() method). Hashable objects which compare equal must have the same hash value.Hashability makes an object usable as a dictionary key and a set member, because these data structures use the hash value internally.All of Python’s immutable built-in objects are hashable, while no mutable containers (such as lists or dictionaries) are. Objects which are instances of user-defined classes are hashable by default; they all compare unequal (except with themselves), and their hash value is derived from their id().源码 # -*- coding: utf-8 -*-# 从数组和列表章复制的代码class Array(object):def __init__(self, size32, initNone):self._size sizeself._items [init] * sizedef __getitem__(self, index):return self._items[index]def __setitem__(self, index, value):self._items[index] valuedef __len__(self):return self._sizedef clear(self, valueNone):for i in range(len(self._items)):self._items[i] valuedef __iter__(self):for item in self._items:yield itemclass Slot(object):定义一个 hash 表 数组的槽注意一个槽有三种状态看你能否想明白。相比链接法解决冲突二次探查法删除一个 key 的操作稍微复杂。1.从未使用 HashMap.UNUSED。此槽没有被使用和冲突过查找时只要找到 UNUSED 就不用再继续探查了2.使用过但是 remove 了此时是 HashMap.EMPTY该探查点后边的元素扔可能是有key3.槽正在使用 Slot 节点def __init__(self, key, value):self.key, self.value key, valueclass HashTable(object):UNUSED None # 没被使用过EMPTY Slot(None, None) # 使用却被删除过def __init__(self):self._table Array(8, initHashTable.UNUSED) # 保持 2*i 次方self.length 0propertydef _load_factor(self):# load_factor 超过 0.8 重新分配return self.length / float(len(self._table))def __len__(self):return self.lengthdef _hash(self, key):return abs(hash(key)) % len(self._table)def _find_key(self, key):index self._hash(key)_len len(self._table)while self._table[index] is not HashTable.UNUSED:if self._table[index] is HashTable.EMPTY:index (index*5 1) % _lencontinueelif self._table[index].key key:return indexelse:index (index*5 1) % _lenreturn Nonedef _find_slot_for_insert(self, key):index self._hash(key)_len len(self._table)while not self._slot_can_insert(index):index (index*5 1) % _lenreturn indexdef _slot_can_insert(self, index):return (self._table[index] is HashTable.EMPTY or self._table[index] is HashTable.UNUSED)def __contains__(self, key): # in operatorindex self._find_key(key)return index is not Nonedef add(self, key, value):if key in self:index self._find_key(key)self._table[index].value valuereturn Falseelse:index self._find_slot_for_insert(key)self._table[index] Slot(key, value)self.length 1if self._load_factor 0.8:self._rehash()return Truedef _rehash(self):old_table self._tablenewsize len(self._table) * 2self._table Array(newsize, HashTable.UNUSED)self.length 0for slot in old_table:if slot is not HashTable.UNUSED and slot is not HashTable.EMPTY:index self._find_slot_for_insert(slot.key)self._table[index] slotself.length 1def get(self, key, defaultNone):index self._find_key(key)if index is None:return defaultelse:return self._table[index].valuedef remove(self, key):index self._find_key(key)if index is None:raise KeyError()value self._table[index].valueself.length - 1self._table[index] HashTable.EMPTYreturn valuedef __iter__(self):for slot in self._table:if slot not in (HashTable.EMPTY, HashTable.UNUSED):yield slot.key######################################### # 上边是从 哈希表章 拷贝过来的代码我们会直接继承 HashTable 实现 dict #########################################class DictADT(HashTable):def _iter_slot(self):for slot in self._table:if slot not in (HashTable.EMPTY, HashTable.UNUSED):yield slotdef __setitem__(self, key, value):self.add(key, value)def __getitem__(self, key):if key not in self:raise KeyError()else:return self.get(key)def items(self):for slot in self._iter_slot():yield (slot.key, slot.value)def keys(self):for slot in self._iter_slot():yield slot.keydef values(self):for slot in self._iter_slot():yield slot.valuedef test_dict_adt():import randomd DictADT()d[a] 1assert d[a] 1d.remove(a)l list(range(30))random.shuffle(l)for i in l:d.add(i, i)for i in range(30):assert d.get(i) iassert sorted(list(d.keys())) sorted(l)test_dict_adt()思考题 你能在哈希表的基础上实现 dict 的其他操作吗对于 python 来说哪些内置数据类型是可哈希的呢list, dict, tuple, set 等类型哪些可以作为字典的 key 呢?你了解可变对象和不可变对象的区别吗你了解 python 的 hash 函数吗你了解 python 的__hash__ 和 __eq__ 魔术方法吗它们何时被调用 延伸阅读 阅读 python 文档关于 dict 的相关内容
http://www.zqtcl.cn/news/808412/

相关文章:

  • 郑州区块链数字钱包网站开发公司局部装修改造找哪家装修公司
  • 网站界面可以做版权吗学生网站建设的总结与评价
  • 用表格做网站10条重大新闻
  • 河南定制网站建设报价盐城网站建设制作工作室
  • 能看各种网站的浏览器wordpress文章名称背景
  • ppt做视频模板下载网站网站建设在哪些方面
  • 能用pinduoduo做网站吗网站建设行业的分析
  • 新乡商城网站建设价格做网站网站会怎么样
  • 给个网站能用的2022作品集模板
  • 做推送好用的网站科技资讯网站有哪些
  • 手机上如何制作网站wordpress阅读量随机生成
  • 汝州市住房和城乡建设局网站网站自己做流量
  • 怎么做网站有利于收录沭阳做网站公司排名前十
  • 给企业做网站如何定价电商系统平台
  • 山东川畅科技网站设计流量网站建设教程
  • 湖南省住房建设厅网站企业手机网站制作
  • 做虚假网站犯法吗发稿计划
  • 网站怎么防黑客网站建设一般要多大空间
  • 做网站一般要多钱织梦做网站被告
  • 响应式网站如何设计网页设计与制作课程标准化项目申报书
  • 苏州公司技术支持 苏州网站建设蔬菜类网站建设规划书
  • 主流做网站wordpress字体设置
  • 大连网站建设解决方案加快政务网站群建设管理
  • 淮南网站建设全包成都设计咨询集团有限公司
  • 网站管理助手v3wordpress主题防盗版
  • 国外网页加速器seo优化排名怎么做
  • 网站后台做图片尺寸是多大企业网站的常见服务
  • 给企业建设网站的流程图南昌网站建设模板网络公司
  • 谷歌wordpress建站中山网站推广服务
  • php网站建设网站兼职做网站在那里接任务