第七课 元组&字典&集合

7.1 元组

7.1.1 元组的简介

  • 元组表现形式tuple()
tuple1=()#空元组
tuple2=(1,True,None,[]) #可以存储各种类型的数据
print(tuple2[2]) #取None的值
  • 元组是⼀个不可变序列(⼀般当我们希望数据不改变时,我们使用元组(也可以称为常量),其他情况下基本都用列表)
  • 使用()创建元素
  • 元组不是空元组至少有⼀个 逗号(,) 当元组不是空元组时括号可以省略
tuple3=10, #当创建元组的时候,可以省略括号
print(type(tuple3) #输出结果是<class 'tuple'>
tuple4=(10) #如果创建的不是一个空元组,那么元组必须要有一个逗号
print(type(tuple4)) #输出结果是<class 'int'>

7.1.2 元组的拆包

  • 元组解包(拆包)指将元组当中的每⼀个元素都赋值给⼀个变量。数据的拆包,只要是一个序列,就可以进行拆包。
    拆分之后的数据类型与拆分之前的数据类型一致
tuple5=(1,2,3)
a,b,c=tuple5
print(a,b,c) #输出结果为1,2,3
tuple6=(1,2,3,4)
e,f,*g=tuple6 #*是一个通配符,可以接收任何数据,打印结果为列表,也可以是空列表
print(e,f,g) #输出结果为1,2,[3,4]

7.1.3 字符串的拆包

s='abcdefgh'
a,*b,c=s
print(a)
print(b)
print(c) 
'''
打印结果为
a
['b', 'c', 'd', 'e', 'f', 'g']
h
'''

7.2 字典

7.2.1 字典的介绍

  • 字典属于⼀种新的数据结构称为映射(mapping)(一一对应的关系就叫做映射 key-value)
  • dict()函数来创建字典
dict1={} #创建空字典
print(type(dict1) #输出结果为<class 'dict'>
dict2={'name':'杨过','age':'18','gender':'男'}
dict3=dict(name='杨过',age=18,gender='男')
dict4=dict([('name','杨过'),('age',18),('gender','男')])#双值子序列 双值('name','杨过') 子序列 指列表的一个子序列
  • 字典的作用和列表类似,都是用来存储对象的容器
  • 列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
  • 在字典中每⼀个元素都有唯⼀的名字,通过这个唯⼀的名字可以找到指定的元素
  • 这个唯⼀的名字我们称之为key 通过key可以快速查询value 也可以称之为值或者是dict.get(key)
dict1={'name':'杨过','age':18,'gender':'男','skill':'黯然消魂掌'}
print(dict1['skill']
print(dict1.get('skill'))

  • 字典我们也称之为键值对(key-value)结构
  • 每个字典中都可以有多个键值对,而每⼀个键值对我们称其为⼀项(item)
  • 创建⼀个有数据的字典 语法 {key:value}
  • 字典的值可以是任意对象 字典的键可以是任意的不可变对象(int str bool
    tuple…)
  • 字典的键是不能重复的,如果出现重复的后面的会替换前面的
# 当字典中的key有重复的时候,后面的key-value会将前面的所替代
dict5={'name':'杨过','age':18,'gender':'男','name':'小龙女'}
print(dict5) #输出结果为{'name': '小龙女', 'age': 18, 'gender': '男'}
print(dicts['gender'])#以键取值

7.2.1 字典的增删改查

dict1={'name':'杨过','age':18,'gender':'男','skill':'黯然消魂掌'}
#len
print(len(dict1)) #输出结果是4
#in not in 用键来判断是否存在
print('name' in dict1)#输出结果为True
print('杨过' in dict2) #输出结果为False
  • update() 将其他字典的key-value添加到当前的字典当中
dict1={'name':'杨过','age':18,'gender':'男','skill':'黯然消魂掌'}
dict1['name']='小龙女' #这个情况是由当前这个可以的时候,会直接替换
dict2['lover']='小龙女' #当不存在这个key的时候,则是直接向字典中插入这个key-value
#添加方法
#dict.setdefault(key) 向字典中添加key-value
dict1.setdefault('name','小龙女')#当key存在的时候,不会对字典做任何修改,而是返回这个value值
dict1.setdefault('lover','小龙女')#当key不存在时,则直接插入这条数据
#dict.update() #将其他字典的key-value添加到当前的字典当中
dict1.update({'1':1,'2':2})
  • del 删除字典中的key-value
dict1={'name':'杨过','age':18,'gender':'男','skill':'黯然消魂掌'}
del dict1['gender']
  • popitem() 删除字典最后的⼀个key-value 这个⽅法是有返回值的。删除之后它会将删除的key-value作为返回值返回
#dict.popitem()不需要传递参数,会默认删除最后一个键值对
dict1.popitem() #返回值是删除的内容
  • pop(key[,default]) 根据key删除⾃定中的value。第⼆个参数可以指定⼀个默认值,当获取不到值的时候会返回默认值
dict1.pop('3','key不存在')

7.2.2 深拷贝和浅拷贝

copy()

copy() ⽅法用来对字典进行浅复制
注意:只能拷贝第一层的数据,不能拷贝第二层乃至更多层的数据独立出来

#不可变类型数据的性质:值改变id改变,值不变,id就不会变
a='sgkif'
b='sgkif'
print(id(a),id(b))#输出结果二者相等
#可变类型:变的是id
c=[1,2,3]
d=[1,2,3]
print(id(c),id(d))#输出结果二者不相等
#copy() 浅拷贝
import copy
dict1={'name':123,'data':[1,2,3]}
dict2=copy.copy(dict1)
dict1['data'][1]=456
print(dict2)
print(id(dict1),id(dict2))# 输出结果dict2为{'name': 123, 'data': [1, 456, 3]}
#深拷贝:能够将所有层次的数据都拷贝出来,重新独立一份
dict2=copy.deepcopy(dict1)
dict1['data'][1]=456
print(dict1,dict2)
print(id(dict1['data'],id(dict2['data']))
print(id(dict1),id(dict2))

7.2.3 字典的遍历

我们主要可以通过3种方式对字典进行遍历

  • keys() 该方法返回字典所有的key
dict1={'name':'杨过','age':18,'gender':'男','skill':'黯然消魂掌'}
for k in dict1.key():
    print(k)
    print(dict1[k])

  • values() 该方法返回⼀个序列 序列中保存有字典的值
for v in dict1.values():
    print(v)
  • items() 该方法会返回字典中所有的项 它返回⼀个序列,序列中包含有双值子序列 双值分别是 字典中的key和value
for k,v in dict1.items():
    print(k,'=',v)

7.3 集合

7.3.1 集合的简介

  • 集合表现形式set 集合和列表非常相似
  • 使用{}来创建集合
set1={} #这样只能创建空字典,不能创建空集合
set2=set() #空集合的创建
print(type(set1),type(set2))
  • 不同点
    • 集合只能存储不可变对象
set1={1,2,3,4,5} #不能存储列表等可变对象
print(set1)
  • 集合中存储的对象是无序的,不支持索引
set2={6,8}
print(set2) #输出结果为{8,6}
  • 集合不能出现重复元素,根据这个特性,可以用集合来去重
set3={1,1,2,2,3,4,5}
print(set3) #输出结果为{1,2,3,4,5}
  • 可以通过set()来将序列和字典转换成集合
  • len() 使用len()来获取集合中元素的数量

7.3.2 集合的使用

  • add()像集合中添加元素 set.add(元素)
s=set()
s.add(1)
print(s) #输出结果是{1}
  • update()将⼀个集合中的元素添加到另⼀个集合当中 set.update()
s={1}
s.update({2,3,4,5})
print(s) #输出结果为{1,2,3,4,5}
  • pop()随机删除集合中的⼀个元素⼀般是删除最后⼀个元素 set.pop()
  • remove() 删除集合中指定的元素 set.remove()
s={1,2,3,4,5}
s.remove(4)
print(s)
  • clear() 清空集合 set.clear()

7.3.3 集合的运算

  • & 交集运算
  • | 并集运算
  • - 差集运算
  • ^ 亦或集
  • <= 检查⼀个集合是否是另⼀个集合的子集
  • < 检查⼀个集合是否是另⼀个集合的真子集
  • >=检查⼀个集合是否是另⼀个集合的超集
  • >检查⼀个集合是否是另⼀个集合的真超集
s1={1,2,3,4}
s2={3,4,5,6}
# 交集
print(s1&s2)
#并集
print(s1|s2)
#差集运算
print(s1-s2) #减去公共部分
#^ 亦或集 不同的部分
print(s1^s2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值