范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python数据类型第2篇字典和集合的原理及应用

  目录
  一、集合  1.定义个有元素的集合  2.自动去重  3.集合常用的五个方法
  二、集合和字典都是无序的
  三 、字典和集合都是无序的,在内存中是怎么存储?  1.为什么说字典和集合是无序的?  2.字典查找值的过程  3.Python 里基础数据类型分为三大类  4.为什么会出现散列冲突?
  四、可变和不可变元素:可哈希和不可哈希  1.可变类型的数据不可进行哈希运算,不可变的数据类型可进行哈希运算  2.集合为什么无序?  3.散列类型为什么是无序的?
  五、性能分析
  字典,大家都用得特别多,花括号包起来的,一个键一个值构成一个元素。 集合和字典的表达形式是一样的。
  字典和集合在 Python 中都是使用花括号进行表示的。  一、集合1.定义个有元素的集合set1 = {1,2,3}
  集合和字典相比,集合里面只有值,没有键。  2.自动去重
  集合有个比较强大的功能:自动去重。  里面不会存在重复的元素, 集合最常见的应用就是对列表去重。  2.1 把字典转换成集合,再转换回字典,它会真去重set1 = {1,2,3,3,3,4,4,4,4,4} print(set1)
  打印出来是集合,重复的元素自动过滤掉了。定义的时候,不管定义多少个重复元素,都自动过滤掉了。  2.2 用集合对列表去重li = [1,1,1,2,2,2,3,3,3] # 利用集合对列表去重 li2 = list(set(li)) print(li2)
  首先把列表转换成一个集合,自动把里面的重复元素给去除掉了,再转换回列表。
  集合在 Python 中是用得比较少的数据类型。  3.集合常用的五个方法
  add()添加元素  update()更新元素 remove()删除元素  clear()清空里面所有的元素 copy()复制元素
  集合,它里面的元素是无序的。可以修改,集合是可变类型的数据。  3.1 空集合中怎么添加元素?
  add() 方法,每次可以往里面添加一个数据进去。 se = set()  # 空集合 # 集合添加数据 se.add("qinghan") # 一次只能添加一个,所以只添加了一个qinghan print(se)
  3.2 删除用 remove()
  集合可以添加也可以删除。删除用 remove() ,传入对应的元素就可以进行删除。
  集合还可以做交集、并集这样的操作,这个对我们用处不大。  3.3update() 更新元素
  跟字典的 update() 一样的。它是将一个集合更新到这个集合里面,可以往里面一次加入多个元素。
  通过这个方法:  se = set()  # 空集合 se.update({111,22,33,44}) print(se)
  可以一次更新进去多个元素。
  看 update 的源码:
  接收的是不定量参数,可以传一个也可以传多个。
  可以往里面加元组、列表、字符串,但是一般用的时候选择用集合,将一个集合更新到原来的集合里面。  3.4clear()清空元素
  还有个常用的方法: clear() 清空里面所有的元素。 3.5 copy()复制元素copy() # 做一个复制的二、集合和字典都是无序的
  Python 里面把它称作散列类型。
  Python 更新到 3.7 之后,字典出现一个新的特性: 3.7 之前的字典是无序的。3.7 之后字典中元素的顺序,它会按你依次添加的顺序进行保存。现在字典,里面的元素实际上是有序的。
  官方文档已声明:
  三 、字典和集合都是无序的,在内存中是怎么存储?
  dict 与 set 实现原理是一样的,都是将实际的值放到 list 中。
  唯一不同的在于 hash 函数操作的对象,对于 dict,hash 函数操作的是其 key,而对于 set 是直接操作的它的元素。
  假设操作内容为 x,其作为因变量,放入 hash 函数,通过运算后取 list 的余数,转化为一个 list 的下标,此下标位置对于 set 而言用来放其本身。
  而对于 dict 则是创建了两个 list,一个 list 该下表放此 key,另一个 list 中该下标对应的 value。
  其中,我们把实现 set 的方式叫做 Hash Set,实现 dict 的方式叫做 Hash Map/Table(注:map 指的是通过 Key 来寻找 value 的过程)。  1.为什么说字典和集合是无序的?1.1 字典和集合底层都是存储在列表里面
  一个字典,在存储的时候,会拆分成 2 部分,会存在 2 个列表里面,一个列表存键,一个列表存值:
  字典存储时的拆分  1.2 怎么通过 Key 找到对应的 Value 值呢?
  字典在存储之前,做了个 Hash 操作:
  Hash操作如图,图片来自网络
  拿到字典的键,进行哈希操作。通过对应的哈希算法,然后得出一串数字。
  拿哈希出来的值除以内存分出来的列表的长度,得到余数。这个余数当成对应元素的下标。把键和值通过下标存在列表中对应的位置。  1.3 散列类型的存储过程
  散列类型的存储过程,图片来自网络
  散列类型的意思就是无序的。  散列就是哈希。散列内部元素是无序的。
  刚开始内存分了 12 个格子存数据,哈希后,第一个元素得出的余数是 6,有 2 个列表,会把键存在对应的列表里面,把值存在对应的 6 的位置。
  散列表存储数据很松散,不像列表完整得排过来的。散列表里面是分散存储的,会把对应的键存到一个散列表里面。
  查找字典中元素的时候,首先它会拿到你这个键,同样进行哈希运算。运算完毕后得出一个值,然后去散列表里面找对应的键。找到对应的键,然后比较下是不是这个键。
  字典哈希的是它的键,不是它的值。集合是哈希的它的值,所以集合里面的值是不可变类型的,不能有可变类型的值。  2.字典查找值的过程
  字典查找值的过程
  散列值就是哈希值。拿到键名,进行哈希,哈希过后得到散列值。
  拿到散列值进行相应的运算,然后拿到表元。表元是在散列表中的一个序号。  2.1 第一种情况
  比如序号是 6,看 6 里面存的这个键,跟你刚才输进来查找的那个键是不是一样的。
  如果是一样的,键相等,会返回表元里面对应的值,会给你找到你所存储的字典的值。
  如果它在这里没找到值的话,这个时候会抛出异常。(也就是字典通过键去找值,没找到的时候就会抛出错误。)  2.2 第二种情况散列冲突:
  每个元素哈希出来的结果是不一样的。如图,第一个元素计算出来是 6,会找到散列表中第 6 个格子。第二个值,运算之后,如果得出来的也是个 6,那么这个时候就会起散列冲突。  解决散列冲突有二种方案:
  方案一:
  有散列冲突的时候,会对散列表进行扩容,扩容后进行重新排序。
  方案二:
  在后面再加个列表。这样的话,第一个元素计算出来是 6,会找到散列表中第 6 个格子。
  第二个值,运算之后,如果得出来的也是个 6,因为加了一个列表(这个列表可存储多个值),就不会起散列冲突了。
  以上是字典,散列类型底层存储。  3.Python 里基础数据类型分为三大类
  第一类,数值类型:  1 一个数只有单个元素,像这个 1 就是 1。
  第二类,序列类型:  字符串、列表、元组。
  第三类,散列类型:  字典、集合。特征:内部元素是无序的。  4.为什么会出现散列冲突?
  举个例子:
  这两个数据通过哈希,计算散列值,取余后拿到的余数,如果是一样的话,在储存值的时候,就会造成散列冲突。
  通过字典的键去哈希,把哈希值存在散列表里面。通过对应的键,然后找到列表中存储的对应元素的值。
  集合相对于列表比较简单一些。集合没有键和值,直接拿到集合里面的值进行哈希操作。  四、可变和不可变元素:可哈希和不可哈希1.可变类型的数据不可进行哈希运算,不可变的数据类型可进行哈希运算。
  集合里面只能存储可哈希的对象。意思是集合里面只能存储不可变的数据类型。  例如:set2 = {1,2,3,[1,2]}
  这个集合就报错了:
  因为列表是可变类型。可变类型是不能进行哈希运算的。
  数值类型、字符串、元组可以,列表、字典、集合不能作为元素储存在这个集合里面。
  集合里面的元素通过哈希操作算出对应值,放到散列表里面。  2.集合为什么无序?
  因为散列表里面存储元素的时候是没有顺序的,散列表也是会不断变化的(会变化长度、调整元素位置的),所以说散列类型是无序的。  3.散列类型为什么是无序的?
  通过哈希算法算了之后,然后存到对应的散列表里面,散列表里面数据存储是没有固定顺序的。  五、性能分析
  字典最占用内存,其次是集合。然后是列表、元组。元组是占用内存最少的。但是查找元素的时候,集合是速度最快的,然后是字典。
  集合用起来不方便,如果知道哪个元素就好查找,但是不知道那个元素在哪里,就不方便从集合里去取那个元素。字典通过键取值,元组、列表通过下标。

美团外卖需要进一步完善经过一段时间的外卖兼职,发现美团外卖还有很多需要完善的地方1系统派单只根据直线距离判断取餐,不根据实际取餐情况。比如给你派个商场里面的订单只是根据你所在位置到商家在商场的所在位置的SpringBoot异常处理,值得学习异常处理背景最近在搭建属于自己的个人博客(码农小白的执念),自己搭建后端的时候首先考虑的是异常处理。个人也是一边学习一边做,难免有疏漏的地方,希望朋友们在不对的地方提醒下。技术栈s宋PLUS新能源我的满意之选空间方面表现还算比较优秀,作用家用代步来说空间绰绰有余了,我一米七五的个头,调整好座椅正常坐在前排,后排仍然有足够的空间,翘二郎腿完全没问题。后备箱空间完全可以满足日常出行,主要用快乐的小猜想第一弹第一个宇宙中还有另外一个自己存在吗?在最近文学电影等娱乐里一直流行着一个非常火爆的理论,那就是多重宇宙论或者平行宇宙论。这一理论的支持者认为我们所生活的宇宙并不是唯一的,而是存在着特斯拉的新超级汽车工厂特斯拉在新能源汽车行业可谓绝对的行业标杆,不论是其带头人的马斯克还是不断地创新的新技术,特斯拉成为了汽车行业一条绝对的鲶鱼,从远期目标来看,特斯拉计划占据汽车销售的整体20,近千万拓荆科技(688072。SH)网上发行最终中签率为0。04355663格隆汇4月10日丨拓荆科技(688072。SH)公布,根据上海证券交易所提供的数据,本次网上发行有效申购户数为3,979,325户,有效申购股数为18,675,687,000股,网十四五交通领域科技创新规划出台明确重点研发任务,布局7项科技工程南方财经4月9日电,日前,交通运输部科技部联合印发了十四五交通领域科技创新规划。规划提出了十四五期间交通运输科技创新工作的指导思想基本原则发展目标和主要任务。规划注重任务落地,布局拼多多无货源店群项目介绍(有需要的可以关注联系我)1什么是拼多多无货源开店模式?做店群,其实在哪个电商平台做都可以,比如最先开始的淘宝店群,后来的拼多多店群,到今年2019年有苗头的京东店群,只要有网购的地方就会有店群,区别就是各金属王国传奇之排行四十一铌(Nb)四电阻消失了几年前,可能只有物理学家对超导性现象感兴趣。而现在超导性已走出了实验室,而开始进入工业技术界,并且在那里找到了用武之地。超导性是什么呢?早在五十年以前,人们就发现,在很低6G研发关键期亟待突破四大难题未来网络建设是全球主要国家角力的重点领域。我国在5G研发应用建设等领域走在全球前列,6G时代能否继续保持领先备受关注。近日,记者采访多位业内人士了解到,未来3至5年将是6G技术研发租号平台视频网站及会员账号财产权视频网站游戏公司诉租号平台不正当竞争纠纷类案件中,原被告都会就账号财产权问题提出主张,还是以优酷诉租号玩案为例看一下各方意见。视频平台会员账号所有权属于平台原告优酷公司认为,优酷会
准自动驾驶水平极狐阿尔法S华为HI版华为造车早已不是什么新鲜事了,诸如ARCFOX极狐AITO问界阿维塔在内的品牌都与华为进行了深度合作,只要与华为是好朋友,多少都会伴随着很多话题点。而我们今天要聊的ARCFOX极狐数据库(mysql)关键知识Mysql是目前互联网使用最广的关系数据库,关系数据库的本质是将问题分解为多个分类然后通过关系来查询。一个经典的问题是用户借书,三张表,一个用户,一个书,一个借书的关系表。当需要查发哥冲击高端成了?天玑9000性能仅次于A15,高通该紧张了今年安卓手机三大旗舰芯片都已经公布了,甚至一些厂商的高通骁龙8手机都已经上市销售了一段时间。而剩下两颗芯片分别是联发科的天玑9000以及三星的Exynos2200。当然由于三星Ex好睡眠从好枕开始,小米生态链出品,还能帮你防打鼾前言有这么一家企业,多年来就只专注于一件事致力于让每个人都拥有8小时的优质睡眠。简单来说,就是睡个好觉。听起来简单,但这却是一件并不容易做到的愿景与目标。它们的名字和愿景一样简单好2022年3大智商税手机,全是割韭菜产品,外行人还视为珍宝春节将至,除旧迎新之际,弥漫着年味儿的同时,更大手机厂商也开始大肆营销。那么如何分辨好手机和坏手机呢?今天我就来给大家排排雷,以下三款手机建议绕道,都是高价低配的代表,买了很容易吃生鲜电商叮咚买菜发生工商变更经营范围新增非居住房地产租赁共享自行车服务等中国网科技1月25日讯天眼查显示,近日,叮咚买菜关联公司上海壹佰米网络科技有限公司发生工商变更,公司注册资本由35亿元增加至80亿元,增幅128。57。同时公司经营范围新增非居住房比特币遭遇新年劫!跌穿34000美元,发生了什么?本文来源于新浪财经和21世纪经济报道,金十数据整合报道对于熟悉加密货币的投资者而言,早已习惯了比特币大起大落的行情。2022年开年至今,比特币跌跌撞撞来到了34000美元下方。继周996是比较火的议题,为什么华为的高强度工作节奏却很少被讨论?华为现在正是民族品牌,谁敢提那些呀?就跟着喊好就行!反正谁难受谁知道。任正非被烤着热乎,但他的难处谁知道?谁又能帮着解决呢?现代人真可谓又要牛儿长得好又要牛儿不吃草人类自有文明以来来电显示费何时取消?工信部非政府定价,35年内逐步取消澎湃新闻记者吕新文据人民网领导留言板1月24日消息,针对网民关来电显示费用何时能够取消的留言,工业和信息化部回复称,来电显示费不由政府进行定价,目前仅存在于部分未迁转已经停售的老套过度赋权却对有害内容视而不见,英网络安全法草案被要求重写环球时报综合报道为整饬网络乱象,英国政府于去年发布酝酿已久的网络安全法草案,声称要让英国变成上网最安全的国家。然而,英国议会近期有反对意见指出,这部草案一边为政府监管机构及社交媒体4个交易日持续下跌,虚拟货币为何又暴跌4个交易日累计下跌超23虚拟货币为何又暴跌本报记者李华林比特币又又又跌了。近日,比特币迎来瀑布式暴跌,1月21日至1月24日间,由4。3万美元左右一路下挫到3。3万美元左右,4个交