拜师教育第一阶段day4-5_python基础

本文介绍了Python编程中的字典、集合和控制语句的基础知识。详细讲解了字典的创建、访问、修改和删除操作,以及序列解包的概念。深入探讨了字典的散列表底层原理,强调了键必须可散列的重要性。同时,讨论了集合的创建、操作以及其与字典的相似性。最后,概述了Python的选择和循环结构,包括if语句、while和for循环,以及相关控制语句的使用。
摘要由CSDN通过智能技术生成

第四-五章  字典、集合与控制语句

1.字典:由“键值对”组成的无序可变序列,其中可以通过“键对象”找到相应的“值对象”进行操作,但要注意“键”为不能重复的任意不可变数据(整数、浮点数、字符串、元组),“值”为可变对象且可以重复。

字典的创建:通过{'name':'Lisa','age':12,'city':'NewYork'}、dict(name='Lisa',age=12,city='NewYork')创建字典;使用dict(zip(包含键对象的列表,包含值对象的列表))创建字典;通过dict.fromkeys(['name','age','job']) 创建有键无值得字典。

字典的访问:通过的d['keyname']获得相应值;通过d.get('keyname'[,'不存在默认返回对象']);通过d.items()/d.keys()/d.values()列出字典所有键值对/键/值;通过len()检查键值对的数目;通过'keyname' in/not in d检测“键”是否在字典中。

字典元素添加、修改、删除:给字典新增“键值对”,如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在, 则新增“键值对”。 a['Newkeys']='Newvalue';使用a.update(b)更新字典,将原有的键保留,对应的值替换为b的,并将新键值对更新入字典;使用del(d['keyname'])删除对应的键值对,d.pop('keyname')可以返回指定的值对象,删除对应字典中的键值对,或者用d.clear()删除字典对象。可通过d.popitem()一个接一个地移除并处理项。

2.序列解包:方便对多个变量赋值(元组(x,y,z)=(1,2,3)列表[x,y,z]=[1,2,3])

对字典序列的解包(对键操作)

d={'国籍':'中国','年龄':25,'工作':'老师'}
a,b,c=d           #对键进行解包
l=[a,b,c]
print(l)
e,f,g=d.values()  #对值进行解包
m=[e,f,g]
print(m)
h,i,j=d.items()   #对键值对进行解包
n=[h,i,j]
print(n)

3.字典核心(散列表:总有空白元素的数组,每个单元叫由键对象和值对象构成的bucket)底层原理:

(I)将一个键值对放进字典的底层过程:首先要通过hash('keyname')计算对应键的散列值,之后根据字典序列的长度从hash(‘keyname’)对应2进制码的右侧获取相应长度的二进制数,取此数作为偏移量,查询当前偏移量所指的bucket是否为空,如若空则将键值对放入其中,若非空,继续从hash(‘keyname’)对应2进制码再往左取相应位数的二进制码,直至找到可以放入键值对的bucket为止。当列表已占位的bucket数目占总数2/3左右时,数组就需要扩容。

(II)根据键查找键值对的过程:第一步,我们仍然要计算“keyname”对象的散列值, 假设数组长度为 8,我们可以拿计算出的散列值的最右边 3位数字作为偏移量,若为“101”,十进制是数字 5。我们查看偏移量 5,对应的bucket 是否为空。如果为空,则返回None。如果不为空, 则将这个bucket的键对象计算对应散列值,和我们的散列值进行比较,如果相等。则将对应“值对象”返回。如果不相等,则再依次取其他几位数字,重新计算偏移量。依次取完后仍然没有找到,则返回 None。

注意:(1) 键必须可散列: 整数、浮点数、字符串、元组,都是可散列的。自定义对象需要支持下面三点:支持 hash()函数、支持通过__eq__()方法检测相等性、若a==b为真,则 hash(a)==hash(b)也为真。 (2)字典在内存中开销巨大,典型的空间换时间。(3)键查询速度很快。(4)往字典里面添加新建可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字典的同时进行字典的修改(即要先

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值