字典、元组、集合内置方法
2022.3.10今日笔记
- 字典内置方法
- 元组内置方法
- 集合内置方法
- 小练习
一、字典内置方法
1、类型转换
结构:dict()
d1 ={ 'name': 'jason', 'age': 18, 'hobbies': ['play game', 'basketball']}
2、按K取值
直接使用k取v:
print(d1['name']) # jason 显示值存在
print(d1['xxx']) # 报错 键不存在则直接报错
因此字典取值我们一般推荐使用get()方式:
print(d1.get('name') # jason 显示值存在
print(d1.get('xxx') # None 键不存在不会报错,返回None
print(d1.get('name', '这个键不存在')) # name存在则后面的参数不会用到
print(d1.get('xxx', '这个键不存在')) # xxx不存在,返回第二个参数'这个键不存在'
3、修改值
d1['name'] = 'jasonDSB' # name键存在则修改值
d1['xxx'] = 'jasonDSB' # xxx不存在则新增一个键值对'xxx':'jasonDSB'
字典是可变类型,值改变,内存地址不变
4、添加键值对
d1['pwd'] = 123 # pwd键不存在则是新增一个键值对'pwd': 123
5、统计字典中键值对的个数
print(len(d1)) # 3
6、成员运算,也只能判断K值
print('jason' in d1 ) # False 因为只能判断k
print('name' in d1) # True 因为name是k,可以被检索到
7、删除键值对
方式1:del+空格
del d1['name'] # 通用删除方式,删除name对应的值
方式2:pop
print(d1.pop('name')) # 返回值jason,表示删除name:jason键值对,注意:与列表不同,不能用pop()弹出尾部
方式3:popitem
print(d1.popitem()) # 随机弹出一个
8、获取所有的键、值、键值对
print(d1.keys()) # 返回dict_keys['name','age','hobbies']
print(d1.values()) # 返回dict_values['jason',18, ['play game', 'basketball']]
print(items()) # 返回dict_items([('name', 'jason'), ('age', 18), ('hobbies', ['play game', 'basketball'])])
这里可以堪称列表套元组
9、了解操作
update更新字典
dic = {'k1':'jaosn','k2':'tony','k2':'jack'}
dic.update('k1':'jn','k4':'xx')
print(dic) # {'k1':'jn','k2':'tony','k2':'jack','k4':'xx'} 因此键存在则修改,不存在则新增
fromkeys()快速生成字典
dic = dict.fromkeys(['k1','k2','k3'], [])
print(dic) # {'k1':[],'k2':[],'k3':[]}
##################笔试题###################
dic['k1'].append(111) # 三个键指向的是同一个列表
print(dic) # {'k1': [111], 'k2': [111], 'k3': [111]}
setdefault()
dic = {'k1': 111, 'k2': 222}
print(dic.setdefault('k3',333)) # 键不存在则新增键值对,且返回新增v
print(dic.setdefault('k1',666)) # 键存在则返回对应值,不做修改,相当于查看k对应的值
元组内置方法
1、类型转换
tuple()
支持for循环的数据类型都能转换成元组,字符串、列表、字典、集合等
2、元组的特性
t1 = (11)
print(type(t1)) # int
'''因此当元组内只有1个元素的时候,一定要在这个元素后面加逗号'''
3、内置方法
t1 = (11, 22, 33, 44, 55, 66)
(1)索引取值
print(t1[0]) # 11
print(t1[-1]) # 66
(2)切片
print(t1[1:4]) # 取一到三
print(t1[-4:-1])
(3)步长(间隔)
print(t1[1:4:2]) # 步长为2,区间为1-3
print(t1[-4:-1:-1]) # 反向间隔
(4)统计元组内元素个数
print(len(t1)) # 6
(5)成员运算
print(66 in t1) # True
(6)统计某个元素出现的次数
print(t1.count(22)) # 1 表示一次
注意!!!元组内的元素不能'修改:因此元素内各个索引值指向的内存空间不能改,但是指向的如果是列表等多元素可变类型,则列表内的元素可以修改,联系下面笔试题进行理解
"""
笔试题
tt = (11, 22, 33, [11, 22])
tt[-1].append('heiheihei')
问:执行之后的结果 正确答案选B
A.报错 B.正常添加 C.不知道
"""
tt = (11, 22, 33, [11, 22])
print(id(tt[-1])) # 1493843855176
tt[-1].append('heiheihei')
print(id(tt[-1])) # 1493843855176
print(tt) # (11, 22, 33, [11, 22, 'heiheihei'])
集合内置方法
1、类型转换
set([11,22,33,44,])
同理集合内的元素只能是不可变类型,且集合内是无序的,并且元素不能重复
2、两大功能(去重、关系运算)
(1)集合自带去重功能,只要转化成集合,机会自动清理重复项,以列表转集合为例:
s1 = [1,1,1,1,1,3,3,3,4,4,4,4,5,5,5,5]
print(set(s1)) # {1, 3, 4, 5}
(2)关系运算
f1 = {'jason','kevin','tony','jerry'}
f2 = {'jason','tom','jerry','jack'}
1.求两个人的共同好友
print(f1 & f2) # {'jason','jerry'}
2.求两个人其中一个人的单独好友
print(f1 - f2) # {'kevin',tony}
3.求两个人的所有好友
print(f1 | f2) # {'kevin', 'jack', 'tom', 'jason', 'jerry', 'tony'}
4.求两个人的所有不同好友
print(f1 ^ f2) # {'jack', 'tony', 'tom', 'kevin'}
垃圾回收机制
1、引用计数
引用计数为内存中数据身上绑定的变量名的个数
python会将引用计数为0的数据清除
2、标记清除
当空间即将溢出时,python会启动应急机制停止程序,并检查每个数据的引用计数,为0的打上标记
3、分代回收
根据值存在的时间长短以及引用次数将数据分为三个等级,分别从高到底监督监管次数越多
作业解答
1.练习昨日注册登录作业
2.去重列表元素并保留原来的顺序
l = ['a', 'b', 1, 'a', 'a']
答:
n = []
l = ['a', 'b', 1, 'a', 'a']
for m in l:
if m in n:
continue
else:
n.append(m)
print(n)
3.去重下列数据字典并保留原来的顺序
# 针对不可变类型,并且保证顺序则需要我们自己写代码实现,例如
l=[
{'name':'lili','age':18,'sex':'male'},
{'name':'jack','age':73,'sex':'male'},
{'name':'tom','age':20,'sex':'female'},
{'name':'lili','age':18,'sex':'male'},
{'name':'lili','age':18,'sex':'male'},
]
答:
j = []
for i in l:
if i in j:
continue
else:
j.append(i)
print(j)
4.关系运算
有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons={'jason','oscar','kevin','ricky','gangdan','biubiu'}
linuxs={'oscar','tony','gangdan'}
1. 求出即报名python又报名linux课程的学员名字集合
答:print(pythons & linuxs)
2. 求出所有报名的学生名字集合
答:print(pythons | linuxs)
3. 求出只报名python课程的学员名字
答:print(pythons - linuxs)
4. 求出没有同时这两门课程的学员名字集合
答:print(pythons ^ linuxs)
5.整理今日内容及笔记
6.思考本周大作业



浙公网安备 33010602011771号