2020-09-26 Python基础学习第四天笔记


2020-9-25
Day4

一、字典

字典是“键值对”的无序可变序列,“键”是任意的不可变数据,比如:整数、浮点数、字符串、元组。但是:列表、 字典、集合这些可变对象,不能作为“键”。并且“键”不可重复。

1.创建字典
  • 1.用{},dict()来创建字典对象
a = {'name':'gaoqi','age':18,'job':'programmer'}  
#注意,age上面的引号,未定义的变量不能作为键
a = dict(name = 'gaoqi',age = 18, job ='programmer' )
a = dict([('name','gaoqi'),('age',18),('job','programmer')])
- 2.zip()创建字典
```python
>>> k = ['name','age','job']
>>> v = ['gaoqi',18,'programmer']
>>> g = dict(zip(k,v))
  • 3.先用列表创建键值,再用fromkeys创建新字典。
a = dict.fromkeys(['name','age','job'])
2.字典元素的访问
  • 1.通过 dic[keys] 获得values。若键不存在,则抛出异常。
  • 2.dic.get(keys,返回值)获得values,如果keys不存在,输出返回值,默认返回值为none
  • 3.dic.items()列出所有的键值对
  • 4.dic.keys()列出所有键值,dic.values()列出所有值。
3.字典元素添加,修改,删除
  • 1.给字典新增“键值对”。如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在, 则新增“键值对”。例如a['address']='西三旗 1号院'
  • 2.使用update()将新字典中所有键值对全部添加到旧字典对象上。如果key有重复,则直接覆盖,例如a.update(b)
  • 3.字典中元素的删除,可以使用del()方法;或者 clear()删除所有键值对;pop()删除指定键值对,并返回对应的“值对象”;例如del(a['name']),a.pop('age')
  • 4.popitem() :随机删除和返回该键值对。
4.序列解包

序列解包可以用于元组、列表、字典。序列解包可以让我们方便的对多个变量赋值。用于字典时,默认是对“键”进行操作; 如果需要对键值对操作,则需要使用 items();如果需要对“值”进行操作,则需要使用 values()。

>>> x,y,z=(20,30,10)
>>> (a,b,c)=(9,8,10)
>>> [a,b,c]=[10,20,30]
>>> s = {'name':'gaoqi','age':18,'job':'teacher'}
>>> a,b,c = s
>>> a
'name'
>>> a, b, c = s.items()
>>> a
('name', 'gaoqi')
>>> a, b, c = s.values()
>>> a
'gaoqi'
5. 一个键值对放进字典的底层过程
  • 1.计算键的散列值,Python 中可以通过hash()来计算。
  • 2.假设数组长度为 2**n,我们可以计算出的散列值的[-(n+1) : -1]二进制数字作为偏移量,查看偏移量对应的 bucket 是否为空。如果为空,则将键值对放进去。
  • 3.如果不为空,则取[-2n-1:-n-1]作为偏移量,再查看偏移量的 bucket 是否为空。
  • 4.每次移动N位直到找到为空的 bucket 将键值对放进去.
  • 5.Python在散列表接近 2/3 放满时,数组就会扩容,创造更大的数组,并将原有内容拷贝到新数组中。
6. 根据键查找“键值对”的底层过程
  • 1.计算键的散列值,Python 中可以通过hash()来计算。
  • 2.假设数组长度为 2**n,我们可以计算出的散列值的[-(n+1) : -1]二进制数字作为偏移量,查看偏移量对应的 bucket ,验证键值的hash值是否一致。如果一致,则将值对象输出。
  • 3.如果不一致,则继续取[-2n-1:-n-1]作为偏移量,再查看偏移量的 bucket 的键值是否与输入一致。
  • 4.每次移动N位直到找到一致的 bucket,或者返回none.
7.字典用法总结

1.键必须可散列

  • (1) 数字、字符串、元组,都是可散列的。
  • (2) 自定义对象需要支持下面三点:

1 支持 hash()函数
2 支持通过__eq__()方法检测相等性。
3 若a==b为真,则 hash(a)==hash(b)也为真。

  1. 字典在内存中开销巨大,典型的空间换时间。
  2. 键查询速度很快
  3. 往字典里面添加新建可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字 典的同时进行字典的修改,可先遍历再修改。

二、集合

集合是无序可变,元素不能重复且唯一。集合的所有元素都是字典 中的“键对象”。
1.使用{}创建集合对象,并使用 add()方法添加元素

  1. 使用set(),将列表、元组等可迭代对象转成集合。如果原来数据存在重复数据,则只保留一个。
  2. remove()删除指定元素;clear()清空整个集合
  3. 在这里插入图片描述

三、条件语句

条件表达式中,不能有赋值操作符“=”

例1.条件语句简洁写法

num = input("请输入一个数字") 
print( “num小于10if int(num)<10 else "数字太大")

例2. 输入一个分数。分数在 0-100 之间。90 以上是A,80 以上是 B,70以上是 C,60 以上是D,60 以下是E。多练习

score = int(input("请输入一个0~100之间的正整数:"))
grade = "ABCDE"
num = 0
if score>100 and score<0:
    score = int(input("输入错误!请重新输入一个0-100之间的正整数:"))
else:
    num = score//10
    if num<6:  num = 5
    if num==10: num = 9
print("分数是:{0},成绩是:{1}".format(score,grade[9-num]))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值