【Python基础】字典dict和集合set
今天看了一些python的字典和集合的文章,发觉底层有些东西自己不是很清楚,关于哈希和内存,网上搜了很多发现都是零星的说明,包括csdn里面都是很多杂乱的记录。通过自己搜集点东西把基础用法和实现原理都整理一下。有时自己遇到问题总想着先放下往下面看,最后一拖再拖也该把问题忘记了,更多时候应该以深度优先,把眼把前的问题整理、理解清楚。
一、字典
字典是一种键---值映射类型,字典是一种随机存储类型,通过键可以迅速地查找到对应的值。
1、创建与初始化
创建:
info = {} #性能上更优于dict(),原因为{}直接调用底层的C语言关键字,#dict()是一个回调函数info = dict()list_a = ["str_1","str_2","str_3"]
list_b = [1,2,3]
dic_from_list = dict(zip(list_a,list_b)) #{"str_1":1,"str_2":2,"str_3":3}初始化:
info = {"key_str":value}
info = dict(key_str = value)
性能上更优于dict(),原因为{}直接调用底层的C语言关键字,dict()是一个回调函数
https://www.cnblogs.com/xiaoerlang/p/10361001.html
这里引用一下,别人的相关内容,通过dis模块查看两种初始化方式的字节码,发现dict()是执行了一次函数调用工程,二者的执行时间也可以比较。关于dis和字节码我在另一篇文章进行介绍。
import dis
dis.dis("{ }")
<123> 32032
dis.dis("dict()")
LOAD_CONST 25449 (25449)
LOAD_GLOBAL 10536 (10536
from timeit import timeit
timeit("d = dict()")
0.14620208740234375
timeit("d={}")
0.04514813423156738
前面说到字典是键-值对,具有O(1)复杂度的查找复杂度,这里说明一下其中的实现原理即为通过将键值(key)通过哈希函数,获得哈希值,对一个哈希表(也叫散列表)长度取余,对应到该表中的某个具体下标中,将其“值”value存储其中。其中dict的查找、删除都是同样的操作。 哈希就会存在哈希冲突,也就是取余数后,如果两个不同键值得东西找到了相同位置,python通过开放寻址方法来寻找可插入的地方。(注:哈希冲突还有一种链接法解决,这里我还没搞懂。写完这块有空学习一下原理 https://foofish.net/python_dict_implements.html
这里再次借鉴下别人的东西,大家对我某些说法存在迷惑时,可以再对照这篇文章看一下。
二、集合set
set是一个无序且不重复的集合,集合也是通过哈希函数进行映射,将不同的键值存储到不同的位置。其实现原理上与dict一致,需要重点说明的一句是,在当哈希表中的数量过多时,需要扩充哈希表的长度,这个过多一般是指大于总长度的2/3时。
关于set的初始化:
s = set()
s = {11,22,33} 且{}用于创建空字典,不能用于创建空集合
s = set(['a','b','c']) 采用list进行创建
【Python基础】字典dict和集合set相关推荐
- python集合set底层原理_Python进阶11_字典dict和集合set的秘密
本节你将看到关于字典dict和集合set更加深入的原理,尤其是关于散列在其中的作用,将回答以下问题:Python 里的 dict 和 set 的效率有多高? 为什么它们是无序的? 为什么并不是所有的 ...
- Python基础数据类型之set集合
Python基础数据类型之set集合 一.set数据类型介绍 二.set集合演示 三.set集合中hash介绍 1.哈希定义 2.数据类型的hash和不可hash 3.set中hash示例 四.set ...
- python基础—字典
阅读文本需要3分钟,不建议跳读 节目清单 字典是python中最重要的数据类型,字典由"键-值"对组成的集合,字典中的"值"通过"键"来引用 ...
- Python基础(06)——集合(set、frozenset)
Python基础(06)--集合(set.frozenset) 集合是无序无索引的集合,在Python中集合用花括号表示,字典也用花括号表示. 1.set的定义 创建集合:集合种的集合项可以是不同数据 ...
- Python 将字典(dict)转换为DataFrame
Python 将字典(dict)转换为DataFrame 1.将字典转换为 Pandas DataFame 的方法 Pandas 的 DataFrame 构造函数pd.DataFrame()如果将字典 ...
- Python遍历字典dict的几种方法(包含两个字典的遍历)
Python遍历字典dict的几种方法 单个字典的遍历 根据key遍历 示例: dict_map = {1:'hello', 2:'world'} for key in dict_map:print( ...
- 大学python教材实验七字典与集合答案_2018-08-28 day7 python基础 字典和集合(含作业)...
1.字典(dict) 一.字典是容器类型(序列 ),以键值对作为元素.字典里面存的数据全是以键值对的形式出现的 b/键值对----> 键:值(key:value) dict1 = {'key1' ...
- python set集合_Python字典(dict)和集合(set)
想必大家都有查字典的经历吧,让我们再回顾一下查字典的步骤:根据拼音或者边旁找到这个字,然后翻到这个字对应的页数,就能看到这个字的详细解释啦. Python字典(dict)其实也是差不多的概念,在字典( ...
- Python 的内置数据类型:列表 list、元组 tuple、字典 dict、集合 set.
Python数据类型:list list 是一种有序集合,由于Python是动态语言,所以 list 中包含的元素并不要求都必须是同一种数据类型,我们完全可以在 list 中包含各种数据. 访问列表中 ...
最新文章
- 清华教授穿红色短裤火“出圈”,网友:哈哈哈哈太真实了
- java 千分位格式话_Java 字符串小数转成千分位格式
- 组合计数 ---- 2020 icpc 上海 The Journey of Geor Autumn(思维划分问题计数+预处理优化)
- RTX2013和微信企业号打通
- lstm中look_back的大小选择_基于机器学习检测僵尸网络中的域名生成算法
- R-CNN(Rich feature hierarchies for accurate object detection and semantic segmentation)论文理解...
- google bigtable论文原文_CTR论文笔记[1]:Wideamp;Deep
- Linux虚拟机sqlite数据库安装教程、命令实现sqlite
- 如何将.crt的ssl证书文件转换成.pem格式
- CISCO的GLBP(网关负载均衡协议)
- 斐波那契数列(一)--对比递归与动态规划(JAVA)
- MATLAB 插值与拟合
- 学习大数据参加培训班,大概需要多长时间?
- 小李飞刀 之 程序员版
- 宏基Acer笔记本热销火热机
- php启动 大量sess文件,关于PHP中Session文件过多的有关问题
- [审核]审核被拒(陌生社交应用)
- 树的先序遍历(双亲表示法)
- 金航数码再度携手 The Open Group年度峰会
- SpringCloud - LCN分布式事务框架