二刷 python:初识散列类型

#散列类型
复习链接
http://c.biancheng.net/view/4395.html
http://c.biancheng.net/view/4372.html

##昨日回顾:
格式化输出 --> 输出方式,可以更好的输出一些有个事/带变量的数据!!!
字符编码 --> 计算机底层的字典,负责把机器码转换为人类能看懂的东西!!!

格式化输出方式:
	1.f-str --> 在字符串前面加上F/f.然后把要输出的变量用大括号包裹起来
		print(f'你好,我叫{name}')
	2.占位符 --> 在字符串里用%+指定的占位符,先占个位置.后续再用具体的值补上(形参,实参)
		print('你好.我是%s'%name)
	3.format --> 在字符串用大括号进行占位.再用具体的值补上
		print('今天是{}节,我发了个{}元红包.'.format('儿童',61.61))
目前最主流的字符编码是: <utf-8>

##初识散列类型
之前已经学过了两种类型:
1.数值类型: 存储一个数值数据
int – 整型,整数
float – 浮点型,小数
bool – 布尔型,判断,表示01
2.序列类型: 有序的存储多个数据
str – 字符串,把字符用引号包裹起来保存
list – 列表,把数据用中括号包裹起来,里面的数据可以改变
tuple – 元组,把数据用小括号包裹起来,里面的数据不可改变

散列类型:
	1.可以存放多个数据
	2.内部是无序的(没有下标)
	3.内部数据不重复

##初识集合(set)
集合(set) --> 表现形式为用大括号包裹起来的数据.里面的数据用逗号隔开,并且1.无序 2.会去重!!!

语法:
	集合名 = {数据1,数据2}
	class52 = {'周文君','王靖雯','王靖雯','黄守杰'}
	print(class52)
	demo = {1,1,1,1,70,1,1,234,54,6,7,8,70,2}
	print(demo) # 没有具体的顺序.

如果集合里有重复的数据,是不会报错的,只不过那些重复的数据并不会存入的集合的内存数据中

#print(demo[1])  集合没有下标,所以输出会报错

集合可以进行简单的逻辑运算,交并差集
	集合1 & 集合2 --> 获取交集
	集合1 | 集合2 --> 获取并集
	集合1 - 集合2 --> 获取差集
& == shift + 7
| == shift + \
- == 减号

交集 --> 一个数据,两个集合里都有它
并集 --> 两个集合里的所有数据(去重)
差集 --> 两个集合之间,自己独有的数据

生活例子,干饭 --> 现在我们有两个碗
碗A{鸡肉,凤爪,莲藕}
碗B{豆腐,鸡肉,烧肉}
交集 --> 两个碗里都有的菜 --> 鸡肉
并集 --> 两个碗里所有的菜 --> 鸡肉,凤爪,莲藕,豆腐,烧肉
差集 --> 碗A - 碗B --> 凤爪,莲藕(碗A独有的)

set1 = {1,2,3}
set2 = {3,4,5}
print(set1 & set2) # 交集3
print(set1 | set2) # 并集12345
print(set1 - set2) # 差集12
print(set2 - set1) # 差集45

我获取到了我电脑里的所有文件/文件夹信息.然后我想删除一些同名/重复的文件 --> 通过交集判断.有哪些文件,是两个文件夹都有的.就属于交集(重复了的)

集合里不可以放列表!!!

集合的本质:
	1.存储非重复数据 --> 去重
	2.进行逻辑判断,进行交并差集运算

现在有个列表,对它进行快速的去重
li = [70,1,70,2,1,1,70,52,True,1] 
li = [70,1,70,2,1,1,70,52,True,1]
# li = set(li) # 把列表转换为集合.实现去重
# li = list(li) # 把去重后的数据,重新转为列表
li = list(set(li)) # 快速语法
print(li)

##集合的方法
set1 = {520,‘樊玮’,True}

增:
	add: 添加一个数据
		集合名.add(数据)
		set1.add(70)
	update: 把一个序列类型打散后添加到集合里
		集合名.update(序列类型)
		set1.update('多喝热水')

删:
	pop: 删除一个数据,最后一位开始删
		集合名.pop()
		set1.pop()

	remove: 删除指定的数据
		集合名.remove(数据)
		set1.remove(70)

##初识字典(dict)
字典(dict) --> 表现形式为用大括号包裹起来的数据,里面的数据用键值对的方式来保存.键值对直接用逗号隔开

键值对:  左边是键,中间是冒号,右边是值
	key:value --> 键相当于名字,值就是数据.
	'帅': 形容一个人好看
	属性名:描述

键名一般是用字符串或整形表示
值里面什么都可以放,放变量,函数,别的都OK

声明语法:
	字典名 = {键1:值1,键2:值2}

kylin = {
'姓名': '麒麟',
'性别': '女',
'爱好': '游戏',
'年龄': 18
}

用字典类型保存的数据有一点好处:
	比起用列表/元组存储的数据.它看起来更加的清晰
kylin = ['麒麟','女','游戏',18,1,True]
所以如果要用到的数据,有明显的对应关系用字典来保存就好更加清晰明了

输出语法:
	print(字典名) # 输出字典
	print(kylin)

	print(字典名[键名]) # 输出指定键的值
	print(kylin['性别']) # 输出值, '女'

修改语法:
	kylin[键名] = 值 # 修改指定键的值
	kylin['性别'] = '男'
	
字典的特性:
	1.字典是通过键值对的方式来获取数据,而不是下标
	2.字典里的数据是可以修改的,还可以嵌套(字典里面还可以放个字典)
	3.字典里, 键是唯一的

总结: 用一个更好看起来更清晰的方式来保存数据.保存方式为键值对. 可以把键值对理解为变量的概念
	键就是变量名  值就是变量值

##声明空变量
li = [] # 声明一个空列表
tu = () # 声明一个空元组
str1 = ‘’ # 声明一个空字符串
dict1 = {} # 声明一个空字典,因为字典用的比集合多
set1 = set() # 声明一个空集合

##字典的方法
增:
setdefault: 给字典添加一个键值对,如果已经有这个键了.就不会添加,而是输出
[1.新增一个键,值为空]
字典名.setdefault(键名)
kylin.setdefault(‘余额’)

		[2.新增一个键值对]
		字典名.setdefault(键名,值)
		kylin.setdefault('偶像','谢霆锋')

		[3.新增一个键,如果键已存在,转输出]
		print(字典名.setdefault(键名))
		print(kylin.setdefault('余额'))
删:
	pop: 通过键名删除指定的数据
		字典名.pop(键名)
		kylin.pop('爱好')

	popitem: 删除一个键值对,从最后一个开始删
		字典名.popitem()
		kylin.popitem()

	clear: 清空整个字典
		字典名.clear()
		kylin.clear()

改:
	update: 修改键的值,如果没有这个键,就新增一个

	[1.修改键值]
	字典名.update({键:值})
	kylin.update({'性别':'男'})

	[2.修改一个值,如果没找到这个键,就新增一个]
	字典名.update({键:值})
	kylin.update({'家乡':'广东'})

	[3.增加多个键值对]
	字典名.update({键:值,键2:值2})
	kylin.update({'毕业学校':'长沙理工大学','职业':'搞java,C++的python讲师'})
查:
	get: 通过键名,获取键的值.如果没有这个键,不会报错,而是输出None
		字典名.get(键名)
		kylin.get('余额')
	keys: 获取所有的键
		字典名.keys()
		kylin.keys()
	values: 获取所有的值
		字典名.values()
		kylin.values()
	items: 获取所有的键值对
		字典名.items()
		kylin.items()

##作业
1.有个列表[1,1,1,2,3,2,3,3,4,5,5]对它进行去重.并输出去重后的’列表’
2.有两个集合,分别为报名对应班级的学员名单,请获取里面的交集,并集与差集
全栈班={“沈昊麟”,“谢霆锋”,“陈奕迅”,“林俊杰”}
高薪班={“谢霆锋”,“陈奕迅”,“吴彦祖”,“彭于晏”}
3.用字典的方式给自己写一个"信息表".并进行增删改查操作(姓名,年龄,身高体重这些)
1.增加一个键值对
2.修改一个键值对
3.删除一个键值对
4.获取里面的键, 值与键值对. 通过键名,获取 "姓名"的值

##预习资料
下节课学习非常有趣,重要的知识点 --> 流程控制语句
http://c.biancheng.net/python/flow_control/

1.获取窗口的名字
2.获取窗口的类型

端午3天.布置周作业. 题目有些多.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值