今天看了一些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相关推荐

  1. python集合set底层原理_Python进阶11_字典dict和集合set的秘密

    本节你将看到关于字典dict和集合set更加深入的原理,尤其是关于散列在其中的作用,将回答以下问题:Python 里的 dict 和 set 的效率有多高? 为什么它们是无序的? 为什么并不是所有的 ...

  2. Python基础数据类型之set集合

    Python基础数据类型之set集合 一.set数据类型介绍 二.set集合演示 三.set集合中hash介绍 1.哈希定义 2.数据类型的hash和不可hash 3.set中hash示例 四.set ...

  3. python基础—字典

    阅读文本需要3分钟,不建议跳读 节目清单 字典是python中最重要的数据类型,字典由"键-值"对组成的集合,字典中的"值"通过"键"来引用 ...

  4. Python基础(06)——集合(set、frozenset)

    Python基础(06)--集合(set.frozenset) 集合是无序无索引的集合,在Python中集合用花括号表示,字典也用花括号表示. 1.set的定义 创建集合:集合种的集合项可以是不同数据 ...

  5. Python 将字典(dict)转换为DataFrame

    Python 将字典(dict)转换为DataFrame 1.将字典转换为 Pandas DataFame 的方法 Pandas 的 DataFrame 构造函数pd.DataFrame()如果将字典 ...

  6. Python遍历字典dict的几种方法(包含两个字典的遍历)

    Python遍历字典dict的几种方法 单个字典的遍历 根据key遍历 示例: dict_map = {1:'hello', 2:'world'} for key in dict_map:print( ...

  7. 大学python教材实验七字典与集合答案_2018-08-28 day7 python基础 字典和集合(含作业)...

    1.字典(dict) 一.字典是容器类型(序列 ),以键值对作为元素.字典里面存的数据全是以键值对的形式出现的 b/键值对----> 键:值(key:value) dict1 = {'key1' ...

  8. python set集合_Python字典(dict)和集合(set)

    想必大家都有查字典的经历吧,让我们再回顾一下查字典的步骤:根据拼音或者边旁找到这个字,然后翻到这个字对应的页数,就能看到这个字的详细解释啦. Python字典(dict)其实也是差不多的概念,在字典( ...

  9. Python 的内置数据类型:列表 list、元组 tuple、字典 dict、集合 set.

    Python数据类型:list list 是一种有序集合,由于Python是动态语言,所以 list 中包含的元素并不要求都必须是同一种数据类型,我们完全可以在 list 中包含各种数据. 访问列表中 ...

最新文章

  1. 清华教授穿红色短裤火“出圈”,网友:哈哈哈哈太真实了
  2. java 千分位格式话_Java 字符串小数转成千分位格式
  3. 组合计数 ---- 2020 icpc 上海 The Journey of Geor Autumn(思维划分问题计数+预处理优化)
  4. RTX2013和微信企业号打通
  5. lstm中look_back的大小选择_基于机器学习检测僵尸网络中的域名生成算法
  6. R-CNN(Rich feature hierarchies for accurate object detection and semantic segmentation)论文理解...
  7. google bigtable论文原文_CTR论文笔记[1]:Wideamp;Deep
  8. Linux虚拟机sqlite数据库安装教程、命令实现sqlite
  9. 如何将.crt的ssl证书文件转换成.pem格式
  10. CISCO的GLBP(网关负载均衡协议)
  11. 斐波那契数列(一)--对比递归与动态规划(JAVA)
  12. MATLAB 插值与拟合
  13. 学习大数据参加培训班,大概需要多长时间?
  14. 小李飞刀 之 程序员版
  15. 宏基Acer笔记本热销火热机
  16. php启动 大量sess文件,关于PHP中Session文件过多的有关问题
  17. [审核]审核被拒(陌生社交应用)
  18. 树的先序遍历(双亲表示法)
  19. 金航数码再度携手 The Open Group年度峰会
  20. SpringCloud - LCN分布式事务框架

热门文章

  1. 【Linux从青铜到王者】第二十篇:Linux网络基础第三篇之IP协议
  2. Qt QString 的.arg
  3. springboot+mybatis-plus在log控制台输出sql语句
  4. DB2数据库的备份与恢复
  5. 蓝色基因 p超级计算机,蓝色巨人推出全球最快计算机蓝色基因 代号P
  6. jupyter的使用
  7. 【MySQL】6.0 表的增删查改
  8. CentOS7救援模式重置root密码
  9. 输入年份判断是不是闰年
  10. php发送 日历邮件_如何阻止垃圾邮件发送者攻击您的Google日历