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

今日内容概要

  • 队列与堆栈的特征
  • 字典及字典内置方法
  • 元组及字典内置方法
  • 集合及集合内置方法

今日内容详细

利用列表实现队列与堆栈的特征

队列
    先进先出
堆栈
    先进后出
需求:使用列表模拟出上述两个概念的特征


# 队列 先进先出
'''先进去的元素 先出来'''
# # 添加元素
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'] # 以列表的形式贮存,需要更大的内存空间
# 将values()的结果可以直接看成是列表
# print(d1.values()) # dict_values(['jason',123,['read','run']] 

# 将items()的结果可以直接看成列表[]套小列表()
print(d1.items()) # dict_items([('username', 'wuxie'), ('password', 123), ('hobby', ['read', 'run'])])

for k,v in d1.items():
    print(k,v)
# username wuxie
  password 123
  hobby ['read', 'run']

# 6. 循环
'''字典for循环只能获取key'''
for i in d1:
    print(i)
# 7. get方法
  dict.get() # 使用频率最为广泛 通过字典的key获取字典的value
  print(d1.get('username')) # wuxie
  print(d1['username']) # wuxie
# get 的优势
 当key不存在:
  print(d1['age']) # 直接报错
  print(d1['age']) # get方法键不存在也不会报错 返回None(什么都没有)
'''get方法还可以给第二个参数 键存在则不使用 键不在则返回第二个参数 不写默认返回None'''

# 第一种创建字典的方式
# d2 = {'k1':'v1','k2':'v2'} # dict({'k1':'v1','k2':'v2'})
#第二种创建方式 
res = dict(name='wuxie',pwd=123,hobby=['read','run'])
print(res) # {'name': 'wuxie', 'pwd': 123, 'hobby': ['read', 'run']}
# 第三种创建方法
l = [
    ['uesrname','wuxie'],
    ['password',123],
    ['hobby',['read','run']
]
d = {}
for i in l :
    d[i[0]] = i[1] # d['username'] = 'wuxie'
print(d)
# {'username': 'wuxie', 'password': 123, 'hobby': ['read', 'run']}    
#######
d ={}
for k,v in l:
    d[k]=v
print(d)
# { 'username': 'wuxie', 'password': 123, 'hobby': ['read', 'run']}
#######
res = dict(l)
print(res)

# {'username': 'wuxie', 'password': 123, 'hobby': ['read', 'run']}

# 8. 清空
  dict.clear()
  d1.clear()
  print(d1)
# 9. 快速生成一个字典
dict.fromkeys()
l = ['username','pwd','hobby']
res = dict.fromkeys(l,None) # None 对应的value的值,先默认,后修改
print(res)
# 10.随机弹出一组键值对
dict.popitem()
res = d1.popitem() 
print(d1)
print(res) # ('hobby',['read','run']))
# 11. setdefault()函数
# setdefault() 函数和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
dd = {'name':'wuxie','pwd':123}
dd.setdefault('age',18) # 键不存在 则新建
res = dd.setdefault('name','cym') # 键存在不修改 而是获取到键对应的值
print(dd,res) # {'name': 'wuxie', 'pwd': 123, 'age': 18} wuxie
# 12. update() 方法
# update() 函数把字典dict的键/值对更新到dict里
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)) #tuple
类型转换 与list一致 支持for循环的都可以
t1 = (1)
print(type(t1))  # int
t2 = ('a')
print(type(t2))  # str
l1 = [1]
print(type(l1))  # list
"""
元组当内部只有一个元素的时候 逗号不能省略
以后只要是容器类型 无论内部有几个元素 都必须要有逗号
    尤其是只有一个元素的情况下
        (1,)
        [1,]
        {'username':'jason',}
"""
作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的) 主要用来读
定义:与列表类型相比,只不过[]换成()
# 1. 按照索引取值(正向取+反向取):只能取
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
如果{}里是空值 系统默认为字典类型
"""定义空集合 需要使用关键set"""
ss = set{}
print(ss,type(ss)) # set

# 1. 去重操作
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)
'''集合内默认不能出现重复的元素 如果出现了会自动去重'''
# 2. 关系运算
  f1 = {'wuxie','cym','tiantian','xiexie'}
  f2 = {'wuxie','cym','bochen','bohe'}
# 共同好友
print(f1 & f2)
# f1独有好友
print(f1 - f2)
#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) # True
print(s1 < s2) # False

总结

  • 字典需要掌握 后期用到非常多
  • 元组类型不可变
  • 集合一般运用在关系运算
posted on   zhifwu  阅读(45)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示