今日内容概要
- 队列与堆栈的特征
- 字典及字典内置方法
- 元组及字典内置方法
- 集合及集合内置方法
今日内容详细
利用列表实现队列与堆栈的特征
队列
先进先出
堆栈
先进后出
需求:使用列表模拟出上述两个概念的特征
# 队列 先进先出
'''先进去的元素 先出来'''
# # 添加元素
l = []
l.append(111)
l.append(222)
l.append(333)
# # 取出元素
print(l.pop(0)) # 111
print(l.pop(0)) # 222
print(l.pop(0)) # 333
# 堆栈 先进后出
'''先进去的元素 先出来'''
l = []
l.append(111)
l.append(222)
l.append(333)
# # 取出元素
print(l.pop()) # 333
print(l.pop()) # 222
print(l.pop()) # 111
字典内置方法
"""
大括号括起来 内部可以存放多个元素
元素的表现形式是以K:V键值对形式
K 是不可变类型
整型 浮点型 字符串
V 可以是任意类型
"""
"""
d1 = {
'username':'wuxie',
'password':123,
'hobby':['read','run']
}
print(d1,type(d1))
d2 = {
1:'wuxie'
2:'xiesj'
3:'cym'
}
print(d2,type(d2))
d3 = {
1.1:'wuxie'
2.2:'cym'
3.3:'tinatian'
}
print(d3,type(d3))
d4 = {
'username':'chengyumeng'
1:'wuxie'
1.1:'kevin'
}
print(d4,type(d4))
# 作用:存多个值,key-value存取,取值速度快
# 定义:key必须是不可变类型,value可以是任意类型
# 1. 按key存取值:可存可取
d1 = {
'username':'wuxie',
'password':123
'hobby':['read','run']
}
print(d1['username'])
d1['username'] = 'tony'
print(d1) # {'username': 'tony', 'password': 123, 'hobby': ['read', 'run']}
# 字典是可变类型
print(d1['age']) # 键不存在 直接报错
d1['age'] = 18 # 键存在则修改 不存在则新建
# 2. 长度len 统计字典键值对的个数
print(len(d1))
# 3.成员运算in和not in
print('tony' in d1) # False 字典默认只暴露key value不暴露 如果想去一般只能通过key
print('username' in d1) # True
# 4.删除
del d1['password']
print(d1)
'''字典不能使用索引!!!'''
# 使用pop 也可以实现删除
res = d1.pop('password')
print(d1)
print(res) # pop 删除可以返回值,返回值为value
# 5. 键keys(),值values(),键值对items()
# 将keys()的结果可以看成列表
print(d1.keys()) # 获取字典中所有的key dict_keys(['username','password','hobby'])
for k in d1.keys():
print(k)
"""
python2与python3对比
python3
keys() dict_keys(['username','password','hobby'])
python2
keys() ['uesrname','password','hobby']
print(d1.items())
for k,v in d1.items():
print(k,v)
password 123
hobby ['read', 'run']
'''字典for循环只能获取key'''
for i in d1:
print(i)
dict.get()
print(d1.get('username'))
print(d1['username'])
当key不存在:
print(d1['age'])
print(d1['age'])
'''get方法还可以给第二个参数 键存在则不使用 键不在则返回第二个参数 不写默认返回None'''
res = dict(name='wuxie',pwd=123,hobby=['read','run'])
print(res)
l = [
['uesrname','wuxie'],
['password',123],
['hobby',['read','run']
]
d = {}
for i in l :
d[i[0]] = i[1]
print(d)
d ={}
for k,v in l:
d[k]=v
print(d)
res = dict(l)
print(res)
dict.clear()
d1.clear()
print(d1)
dict.fromkeys()
l = ['username','pwd','hobby']
res = dict.fromkeys(l,None)
print(res)
dict.popitem()
res = d1.popitem()
print(d1)
print(res)
dd = {'name':'wuxie','pwd':123}
dd.setdefault('age',18)
res = dd.setdefault('name','cym')
print(dd,res)
dd = {'name':'wuxie','pwd':123}
dd.update({'age':18})
dd.update({'name':'cym'})
print(dd)
元组
"""
小括号括起来 括号内可以存放多个元素
元素与元素之间逗号隔开 元素可以是任意类型
元组也可以简单的理解为是列表
元组属于不可变类型
"""
t1 = (1,2,3,4,5,6)
print(type(t1))
类型转换 与list一致 支持for循环的都可以
t1 = (1)
print(type(t1))
t2 = ('a')
print(type(t2))
l1 = [1]
print(type(l1))
"""
元组当内部只有一个元素的时候 逗号不能省略
以后只要是容器类型 无论内部有几个元素 都必须要有逗号
尤其是只有一个元素的情况下
(1,)
[1,]
{'username':'jason',}
"""
作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的) 主要用来读
定义:与列表类型相比,只不过[]换成()
t1 = (11,22,33)
t1[0] = 666
print(t1)
"""
"""
笔试题
t2 = (11,22,[11,22])
t2[2].append(33)
问:上述代码执行的结果是什么
"""
# 2. 切片(左闭右开)
与字符串 列表一致
# 3. 长度
len
# 4. 成员运算 in 和 not in
与列表一致
#5. 循环
fr i in (22,33,11)
print(i)
集合
"""
大括号括起来 内部可以存放多个元素
元素与元素之间逗号隔开(不是K:V键值对) 元素只能是不可变类型(整型 浮点型 字符串 元组)
s = {1,2,3,4}
只有两种情况下才会考虑使用集合
1.关系元素
两个群体之间判断 交叉并集
2.去重操作
去除重复的元素
"""
se = {1,2,3,4,6}
print(type(se))
如果{}里是空值 系统默认为字典类型
"""定义空集合 需要使用关键set"""
ss = set{}
print(ss,type(ss))
l = [11,22,33,55,66,66,55,88,33,11,22]
for循环一个个元素 判断当前元素是否已存在
new_l = []
for i in l:
if i not in new_l:
new_l.append(i)
print(new_l)
直接将列表转换成集合
res = set(l)
print(res)
'''集合内默认不能出现重复的元素 如果出现了会自动去重'''
f1 = {'wuxie','cym','tiantian','xiexie'}
f2 = {'wuxie','cym','bochen','bohe'}
print(f1 & f2)
print(f1 - f2)
print(f2 - f1)
print(f1 | f2)
print(f1 ^ f2)
"""
父集:A包含B 那么A就是B的父集
子集:A包含B 那么B就是A的子集
"""
s1 = {1,2,3,4,5}
s2 = {1,2,3}
print(s1 > s2)
print(s1 < s2)
总结
- 字典需要掌握 后期用到非常多
- 元组类型不可变
- 集合一般运用在关系运算
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端