字典、元组、集合内置方法

2022.3.10今日笔记

  • 字典内置方法
  • 元组内置方法
  • 集合内置方法
  • 小练习

bhbSqH.jpg

一、字典内置方法

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对应的值

bhbaw9.jpg

元组内置方法

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、分代回收

根据值存在的时间长短以及引用次数将数据分为三个等级,分别从高到底监督监管次数越多

bhb1J0.jpg

作业解答

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.思考本周大作业
posted @ 2022-03-10 16:26  马氵寿  阅读(109)  评论(0)    收藏  举报