栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python中的容器,可迭代对象,迭代器和生成器,字典的底层实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python中的容器,可迭代对象,迭代器和生成器,字典的底层实现

python中的容器,可迭代对象,迭代器和生成器

    

 在python中,容器是把多种元素组织在一起的数据结构,容器中的元素就可以逐个迭代获取。

在python中,可迭代对象并不是指某种具体的数据类型,它是指储存了元素的一个容器对象

只要是实现了__iter__()和__next__()的对象,就是迭代器,迭代器是一个可迭代对象。

总之,迭代器是有__iter__()生成,可以通过__next__()进行调用

序列也是一种抽象的概念,它包含了列表,元组的字符串,它本身是不存在的,也是便于学习所创建的概念词。

序列可以分为有限序列的无限序列

字典的底层实现

 字典是python中最通用的数据结构之一,dict可以将一组唯一的键映射到相应的值

字典推导式

dict = {number:number**2 for number in range(10)}
print(dict)

在遍历字典元素时,有一点需要注意。在字典里的key(),values()和items()3个方法的返回值不再是列表,而是视图对象(view objects)。

keys():返回dict_keys对象,可以查看字典的所有键

values():返回dict_values对象,可以查看字典所有的值

items():返回dict_items对象,可以查看所有的{key,value}二元元组

CPython使用伪随机探测(pseudo-random probing)的散列表(hash table)作为字典的底层数据结构。由于这个实现细节,只有可哈希的对象才能作为字典的键。

Python中所有不可变的内置类型都是可哈希的。可变类型(如列表,字典和集合)就是不可哈希的,因此不能作为字典的键。

字典的三个基本操作(添加元素,获取元素和删除元素)的平均事件复杂度为O(1),但是他们的平摊最坏情况复杂度要高得多,为O(N).

还有一点很重要,在复制和遍历字典的操作中,最坏的复杂度中的n是字典曾经达到的最大元素数目,而不是当前的元素数目。换句话说,如果一个字典曾经元素个数很多,后来又大大减小了,那么遍历这个字典可能会花费相当长的事件。因此在某些情况下,如果需要频繁的遍历某个词典,那么最好创建一个新的字典对象,而不是仅在旧字典中删除元素。

字典的缺点和替代方案

使用字典的常见陷阱就是,它并不会按照键的添加顺序来保存元素的顺序。在某些情况下,字典的键是连续的,对应的散列值也是连续值(例如整数),那么由于字典的内部实现,元

树的实现可能和添加的顺序相同:

keys = {num:None for num in range(5)}.keys()
print(keys)

如果我们需要保存添加顺序怎么办?python 标准库的collections模块提供了名为OrderedDicr的有序字典

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325673.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号