07.元组、字典、集合
01.元组 tuple
1.1.元组基本格式
元组格式:
tua = (元素1,元素2,元素3…)
注意:
定义元组时,如果只有一个元素,末尾要加逗号,多个元素用","隔开
不同元素也可以是不同的数据类型
tua = (1,2,3,4,5)
print(type(tua)) #<class 'tuple'>
tua2 = (1,2,3,'a',[123])
print(type(tua2)) #<class 'tuple'>
tub = (1)
print(type(tub)) #<class 'int'> 只有一个元素的时候,末尾必须加上, 否则返回唯一的值的数据类型
tub2 = (1,)
print(type(tub2)) #<class 'tuple'>
tub3 = ()
print(type(tub3)) #<class 'tuple'> 定义空元组
1.2.元组与列表的区别
1.元组只有一个元素,末尾必须加逗号,列表不需要
2.元组只支持查询操作,不支持增删改操作
index:从元组中找出某个对象第一个匹配项的索引位置,如果不在元组中会报一个异常。
count:统计某个元素在元组中出现的次数。
tua = (1,2,3)
# print(tua[1]) #元组也有下标,从左往右,从0开始 2
# #tua[2] = 'a' #报错,元组不支持修改操作
# #count() index() len()跟列表的用法相同
print(tua.count(1)) #1 返回1出现次数 1次
print(tua.index(1)) #0 返回索引
print(tua.index(2)) #1 返回索引
print(len(tua)) #3 元组中元素的长度
print(tua[1:]) #(2, 3) 切片
1.3.应用场景
(1)函数的参数和返回值
(2)格式化输出后面的()本质上就是一个元组
name = 'bingbing'
age = 18
print("%s的年龄是%d"%(name,age)) #bingbing的年龄是18
info = (name,age)
print("%s的年龄是%d"%info) #bingbing的年龄是18
(3)数据不可以被修改,保护数据的安全
02.字典及其常见操作
2.1.字典基本格式
基本格式:字典名 = {键1:值1,键2:值2…}
键值对形式保存,键和值之间用":"隔开,每个键值对之间用”,“隔开。
字典格式:
dic = {'name':'six','age':18}
注意:
键值对形式保存,键具有唯一性,但值可以重复。
dic = {'name':'six','age':18}
print(type(dic)) #<class 'dict'>
dic2 = {'name':'bingbing','name':'susu'} #{'name': 'susu'} #不会报错,键名重复,前面的值会被后面的值覆盖
print(dic2)
dic3 = {'name':'bingbing','name2':'bingbing'} #{'name': 'bingbing', 'name2': 'bingbing'}
print(dic3)
2.2.字典常见操作
2.2.1 查看元素
变量名[键名]
dic = {'name':'bingbing','age':18}
#print(dic[2]) #不可以根据下标,字典中没有下标,查找元素需要根据键名,键名相当于下标
print(dic['age']) #18
#print(dic['sex']) #报错,键名不存在
变量名.get(键名)
dic = {'name':'bingbing','age':18}
print(dic.get('name')) #bingbing
print(dic.get('sex')) #None,键名不存在
print(dic.get('score','不存在')) #不存在,键名不存在,返回自己设置的值
2.2.2 修改元素
变量名[键名] = 值
dic = {'name':'bingbing','age':18}
dic['age'] = 20 #列表通过下标修改,字典通过键名修改 {'name': 'bingbing', 'age': 20}
print(dic)
2.2.3 添加元素
变量名[键名] = 值
注意:键名存在就修改,不存在就新增
dic = {'name':'bingbing','age':18}
dic['score'] = 80 #{'name': 'bingbing', 'age': 18, 'score': 80} 此时没有score键,新增进字典
print(dic)
dic['score'] = 90 #{'name': 'bingbing', 'age': 18, 'score': 90} 此时已经有score键,修改score对应的值
print(dic)
2.2.4 删除元素
del
删除整个字典 del 字典名
dic = {'name':'bingbing','age':18}
del dic #报错,已经被删除了,找不到这个字典
print(dic)
删除指定键值对,键名不存在就会报错 del 字典名[键名]
dic = {'name':'bingbing','age':18}
#del dic #报错,已经被删除了,找不到这个字典
del dic['age'] #{'name': 'bingbing'}
#del dic['score'] #KeyError: 'score' 没有指定的键就会报错
print(dic)
clear()
clear():清空整个字典里面的东西,但保留了这个字典
dic = {'name':'bingbing','age':18}
dic.clear() #{}
dic['score'] = 80 #{'score': 80}
print(dic)
pop()
pop():删除指定键值对,键不存在就会报错
dic = {'name':'bingbing','age':18}
dic.pop('age') #{'name': 'bingbing'}
#dic.pop('score') #KeyError: 'score' 报错,不存在键名
#dic.pop() #报错,没有指定键名
dic.popitem() #3.7之前的版本是随机删除一个键值对,3.7之后的版本默认删除最后一个键值对
print(dic)
2.3字典常见操作二
2.3.1 len()求长度
dic = {'name':'bingbing','age':18}
print(len(dic)) #2 字典中有2个键值对
li = [1,2,3,4,5]
print(len(li)) #5
st = 'star'
print(len(st)) #4
2.3.2 keys() 返回字典里面包含的所有键名
dic = {'name':'bingbing','age':18}
print(dic.keys()) #dict_keys(['name', 'age'])
for i in dic.keys(): #只取出键名
print(i)
2.3.3 values():返回字典里面包含的所有值
dic = {'name':'bingbing','age':18}
print(dic.values()) #dict_keys(['name', 'age'])
for i in dic.values(): #只取出值
print(i)
[print(i) for i in dic.values()]
2.3.4 item():返回字典里面包含的所有键值对,键值对以元组形式
dic = {'name':'bingbing','age':18}
print(dic.items()) #dict_keys(['name', 'age'])
[print(i,type(i)) for i in dic.items()] #i是元组类型
2.4 字典的应用场景
使用键值对,存储描述一个物品的相关信息
03.集合及其常见操作
集合 set
3.1 集合格式: 集合名 = {元素1,元素2,元素3…}
集合格式:
s1 = {1,2,3}
s1 = {1,2,3}
print(s1,type(s1)) #{1, 2, 3} <class 'set'>
s2 = {} #定义空字典 #{} <class 'dict'>
print(s2,type(s2))
s3 = set() #定义空集合 #set() <class 'set'>
print(s3,type(s3))
注意:
1.集合是无序的,里面的元素是唯一的。
2.可以用于元组或者列表去重。
3.2 集合具有无序性
s1 = {'a','b','c','d','e','f'}
print(s1) #每次运行结果都不一样
s2 = {1,2,3} #数字运行结果一样
print(s2)
集合无序的实现方式涉及hash表(了解)
print(hash('a'))
print(hash('b'))
print(hash('c'))
每次运行结果都不同,hash值不同,那么在hash表中的位置也不同,这就实现了集合的无序性
print(hash(1))
print(hash(2))
print(hash(3))
python中int整型的hash值就是它本身,在hash表中的位置不会发送改变,所以顺序也不会改变
print(hash('1'))
print(hash('2'))
print(hash('3'))
用引号括起来,整型变成了字符串类型,所以hash值还是会发生改变
无序性:不能修改集合中的值
3.3 集合具有唯一性,可以自动去重
s1 = {1,2,3,4,5,6,4} #{1, 2, 3, 4, 5, 6}
print(s1)
3.4 集合常见操作
3.4.1 添加元素
(1)add 添加的是一个整体
s1 = {1,2,3,4,5,6,4} #{1, 2, 3, 4, 5, 6}
print("原集合:",s1) #原集合: {1, 2, 3, 4, 5, 6}
#集合的唯一性,决定了如果需要添加的元素在原集合中已经存在,就不进行任何操作
s1.add(9) #一次只能添加一个元素
print("现集合:",s1) #现集合: {1, 2, 3, 4, 5, 6, 9}
s1.add((7,10)) #一次只能添加一个元素
print("现集合:",s1) #现集合: {1, 2, 3, 4, 5, 6, 9}
(2)update 把传入的元素拆分,一个个放进集合中
s1 = {1,2,3,4,5,6,4} #{1, 2, 3, 4, 5, 6}
print("原集合:",s1) #
s1.update('789')
print("添加后:",s1)
s1 = {1,2,3,4,5,6,4} #{1, 2, 3, 4, 5, 6}
print("原集合:",s1) #
s1.update('789')
print("添加后:",s1)
s1.update([7,8,9])#添加列表
print("添加后:",s1)
s1 = {1,2,3,4,5,6,4} #{1, 2, 3, 4, 5, 6}
print("原集合:",s1) #
s1.update('789')
print("添加后:",s1)
元素必须是能够被我们for循环取值的可迭代对象
# s1.update([7,8,9]) #添加列表
# print("添加后:",s1)
s1.update((7,8,9)) #添加元组
print("添加后:",s1)
s1 = {1,2,3,4,5,6,4} #{1, 2, 3, 4, 5, 6}
print("原集合:",s1) #
s1.update('789')
print("添加后:",s1)
# s1.update([7,8,9]) #添加列表
# print("添加后:",s1)
# s1.update((7,8,9)) #添加元组 元素必须是能够被我们for循环取值的可迭代对象
# print("添加后:",s1)
s1.update({7,8,9}) #添加集合
print("添加后:",s1)
3.4.2 删除元素
(1)remove()
remove:选择删除的元素,如果集合中有就删除,没有就会报错
s1 = {1,2,3,4}
s1.remove(2)
print("删除后:",s1) #删除后: {1, 3, 4}
s1 = {1,2,3,4}
s1.remove(5) #报错,集合中没有5这个元素
print("删除后:",s1) #删除后: {1, 3, 4}
(2)pop()
pop对集合进行无序排列,然后将左边的第一个元素删除
s1 = {1,2,3,4}
s1.pop()
print("删除后:",s1) #删除后: {2, 3, 4}
s1 = {1,2,3,4}
s1.pop()
print("删除后:",s1) #删除后: {2, 3, 4}
s1 = {'a','b','c'}
s1.pop() #默认删除根据hash表排序后的第一个元素
print("删除后:",s1) #删除后: {'b', 'c'}
(3)discard
discard:选择要删除的元素,有就会删除,没有则不会发生任何改变,即不会进行任何操作
s1 = {1,2,3,4}
s1.discard(3)
print("删除后:",s1) #删除后: {1, 2, 4}
s1.discard(8)
print("删除后:",s1) #删除后: {1, 2, 4}
s1 = {'a','b','c'}
s1.discard('a')
print("删除后:",s1) #删除后: {'b', 'c'}
s1.discard('e')
print("删除后:",s1) #删除后: {'b', 'c'}
04.交集、并集
4.1 交集 &
含义:共有的部分
a = {1,2,3,4}
b = {3,4,5,6}
c = {5,6,7,8}
print(a & b) #{3, 4}
print(a & c) #set() 没有共有的部分返回空集合set()
print(a | b) #{1, 2, 3, 4, 5, 6}
4.2 并集 |
含义:所有的都放一起,重复的不算(集合的唯一性)
学习地址:https://www.bilibili.com/video/BV1FS421K7Hs/?p=16&spm_id_from=pageDriver&vd_source=279585e3656eb1829d1f31997be26270