目录
1.1 散列类型(哈希类型)
数值类型:
int,float,bool -> 存储一个数值
序列类型:
str,list,tuple -> 存储多个数据
散列类型:
1.无序 【散列类型没有下标】
2.内部元素不重复
1.2 集合 set
1.2.1 概念
集合(set) -> 负责存储【不重复的数据】,并且是【无序存储】的容器,主要用来去重和逻辑比较
1.2.2 性质
唯一性:元素唯一存在,不能重复
可变性:同列表一样。集合可以通过它的一些方法进行修改操作
无序性:无下标,无顺序
set1 = {1, 2, 3, 4, 1, 2, 6, 5, 7, 7, 7, 9, 8, 2, 8}
print(set1) # 正常输出一个集合,里面的数据默认去重
# print(set1[0]) # 散列类型无序,不可以通过下标提取元素,报错
print(type(set1))
语法:
集合名 = {数据1,数据2,数据3.....} # 如果有重复的,是不会被添加到内存空间里面
ps:创建空集合的时候必须使用set() 而不能直接{} ,{}默认是空字典
li1 = [] # 空列表
tu1 = () # 空元组
str1 = "" # 空字符串
dict1 = {} # 空字典
set1 = set() # 空集合
集合的基本操作 --》去重
li = [1, 2, 3, 4, 5, 6, 6, 6, 6, 7, 8, 9, 9, 9]
# 快速写法
li = list(set(li))
1.2.3 运算
运算操作 | Python运算符 | 含义 |
---|---|---|
交集 | & | 取两集合公共的元素 |
并集 | | | 取两集合全部的元素 |
差集 | - | 取一个集合中另一集合没有的元素 |
成员运算 | in 和 not in | 判断一个某个元素是否在或者不在集合中 |
集合1 & 集合2 --> 判断交集 (shift+7)
集合1 | 集合2 --> 判断并集 (shift + \)
集合1 - 集合2 --> 判断差集
交集:两个集合里面共同拥有的数据
并集:两个集合里面的全部数据(不包括重复数据)
差集:差集1 - 差集2 减去共有部分,剩下的就是差集【去掉交集之后就是差集】
# & 交集 取两个集合的公共元素
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 & set2) # 获取公共部分
# | 并集,取两个集合的全部元素,结果会去重
print(set1 | set2)
# - 差集
print(set1 - set2)
- 小练习
碗A {炸鸡,青菜,小龙虾}
碗B {臭豆腐,青菜,螃蟹}
交集:两个碗里面都有的菜,就是交集 =》 青菜
并集:两个碗里面的菜种类加在一起,就是并集 =》炸鸡,青菜,小龙虾,臭豆腐,螃蟹
差集:将和另一个碗共有的菜减掉
碗A - 碗B ==> 炸鸡,小龙虾
碗B - 碗A ==> 臭豆腐,螃蟹
注意:集合不能放列表
集合的作用:
1.存储非重复数据
2.用于将序列类型去重,逻辑判断(交并差)
1.2.4 方法
集合的方法都是作用效果于原集合
增
- add() : 参数为要添加的对象,通过多次添加数据可以发现添加后的元素位置不确定
- update() : 参数为序列类型,会将每一个元素拆分后随机添加集合中
s = {"华为"}
s.add('小米') # add 是往前面添加
print(s)
s.add("苹果")
print(s)
s.update("123")
print(s)
删
```python
pop():随机删除一个元素 # pycharm中默认从左开始删
# 实际上在进行代码实验的时候并不是随机的,默认从左开始删
# 仅在集合元素是字符串类时候,并且cmd运行才会随机删除
remove(内容):有参数,参数为要删除的元素,如果元素不存在则报错
discard(内容):同remove,元素不存在也不报错
clear() : 清空集合中元素
s = {"华为","小米",'苹果'}
s.add('三星') # add 是往前面添加
print(s)
s.add("oppo")
print(s)
s.discard('华为')
print(s)
s.clear()
print(s)
```
1.3 字典 dict
1.3.1 概念
字典(dict)用来存储一些有典型的 “对应关系” 的数据类型,特点就是用键值对的方式来存储数据
name = ["小明",'大锤','汤姆','杰克']
tel = ["10086",'10010','10000','12315']
# 为了方便查阅,python就提供了一个存储方式:字典
字典就是以键值对来存储的
什么是键值对?
小明就是键,对应一个值就是 "10086"
键值对语法: key:value ex "小明":"10086"(一个元素,键值对)
字典的表现形式:字典和集合一样用大括号,如果大括号里面如果存储的是普通的值,就是集合,如果是键值对(说明关系的数据),那么它就是字典
字典跟普通容器不同,更适合去描述一个对象
语法格式:
字典名 = {键名1:值,键名2:值,键名3:值.。。。}
nr = {
'姓名': '小明',
'年龄': 18,
'工作': '写Python'
}
输出方式:
字典名[键]
print(nr['工作'])
print(call['大锤'])
1.3.2 性质
字典在内存中主要是通过键来访问
1. 无序 没有下标,字典可以通过键来访问数据
字典名[键]
2. 不重复,字典的键,是不可以重复的
nr = {
'姓名': '小明',
'年龄': 18,
'工作': '写Python',
'年龄': 28
} # 重复了,默认取最后一个
3. 可变性,字典里面的数据是可变的,能嵌套
nr['年龄'] = 28
nr = {
'姓名': '小明',
'年龄': 18,
'工作': '写Python',
'技能': ['python', 'java', 'c', 'scala', '珠峰']
}
1.3.3 方法
增
- 增
- setdefault:给字典添加一个元素,如果原先有这个元素,就输出它的值
- 字典名.setdefault("键名") -->能增加一个键,值默认为空
- 字典名.setdefault("键名","值")
nr.setdefault("出生日期","1900-08-08")
print(nr)
一般增加不是用方法,而是直接写
zd = {"a": 1, "b": 2}
zd['c'] = 3 # 直接这样也能增加
print(zd)
删
--删
```python
pop() : 删除指定的键
字典名.pop(键名)
zd.pop("c") # 字典
print(zd)
zd.pop("a")
print(zd)
clear() : 清空字典
```
改
```python
update: 修改键的值,如果没有这个键,就新增加一个
字典名.update({键,值})
zd.update({"d":10})
print(zd)
常用的:直接赋值
zd['a'] = 5
print(zd)
```
查
```python
- get(键名,默认值) : 通过键名,获得键值
print(zd.get('c','^_^')) # 区别,找不到不会报错,会填充默认值
- keys: 获得所有的键
- values 获得所有的值
zd = {"a": 1, "b": 2}
zd['c'] = 3 # 直接这样也能增加
print(list(zd.keys()))
print(list(zd.values()))
- items: 获取所有的键值对,将键值对全部装成元组
```
2.1 格式化输出
格式化输出让可以更舒服的输出带有变量的字符串
2.1.1 %方法(占位符)
先预定,占住一个位置,后续再用实际的数据填不上
程序在开发的时候,有时候不确定使用的数据具体是啥,先占个位置
占位符也能分为不同的类型
-
常用的占位符
%s = 字符串
%d = 整数
%f = 小数 =》 默认保留6位小数点
%.1f => 保留一位小数点
%.2f => 保留二位小数点
语法
"xxx%dxxxx%s"%(变量1,变量2)
nr = {
'name': "小明",
'age': 18,
'height': 1.77,
}
print("你好,我叫%s,今年%d岁了,身高%.3f" % (nr['name'], nr['age'], nr['height']))
2.1.2 format()方法
字符串的一个方法
语法
print("你好,我叫{},今年{}岁了,身高{}".format(nr['name'],nr['age'],nr['height']))
2.1.3 f-format()
python3.x 新提供的格式化输出方式,寓意快速
更简单,更常用
语法:在字符串前面加上 f/F,把要输出的变量用大括号{}进行包囊
name = "小明"
age= 18
height = 1.7
print(f"大家好,我叫{name}我今年{age}岁,今年身高是{height}")
# 大括号内的变量可以进行操作 : 方法,切片,增加减少
print(f"大家好,我叫{name[0]}我今年{age+1}岁,今年身高是{height*2}")
3.1 小练习
# 1.将列表数据[1,2,3,2,1,4,4,4,2,5,6,7,7,9,8,10,10]去重
# 2.用字典建立一个个人名片,要求要一个爱好:[]
# 3.有字典 dic = {"k1": "v1", "k2": "v2", "k3": "v3"},实现以下功能:
(1)、遍历字典 dic 中所有的key
(2)、遍历字典 dic 中所有的value
(3)、循环遍历字典 dic 中所有的key和value
(4)、添加一个键值对"k4","v4",输出添加后的字典 dic
(5)、删除字典 dic 中的键值对"k1","v1",并输出删除后的字典 dic
(6)、获取字典 dic 中“k2”对应的值
# 4.students = [
{'name':'小明','age':18,'score':98,'tel':'18888888888','gender':'female'},
{'name':'大明','age':20,'score':95,'tel':'18888888889','gender':'unkown'},
{'name':'汤姆','age':18,'score':88,'tel':'18888888810','gender':'male'},
{'name':'杰克','age':16,'score':58,'tel':'18888888811','gender':'unkown'},
{'name':'山姆','age':19,'score':78,'tel':'18888888812','gender':'male'},
{'name':'麦克','age':17,'score':92,'tel':'18888888813','gender':'male'},
]
# 1.统计及格学生的个数
# 2.将女性改为男性
4.1 解析
# 1.将列表数据[1,2,3,2,1,4,4,4,2,5,6,7,7,9,8,10,10]去重
set1=[1,2,3,2,1,4,4,4,2,5,6,7,7,9,8,10,10]
set2=set(set1)
print(list(set2))
# 2.用字典建立一个个人名片,要求要一个爱好:[]
gr={
'姓名:' :'me',
'年龄:' : 26,
'兴趣爱好:':['打篮球','学python','打游戏','永劫无间']
}
print(gr)
# 3.有字典 dic = {"k1": "v1", "k2": "v2", "k3": "v3"},实现以下功能:
# (1)、遍历字典 dic 中所有的key
dic={"k1": "v1", "k2": "v2", "k3": "v3"}
for i in dic:
print(i)
# (2)、遍历字典 dic 中所有的value
for i in dic.values():
print(i)
# (3)、循环遍历字典 dic 中所有的key和value
for i in dic.keys():
print(i,dic[i])
# (4)、添加一个键值对"k4","v4",输出添加后的字典 dic
'第一种方法: '
dic_1=dic.setdefault("k4","v4")
print(dic)
'第二种方法: '
dic["k4"]='v4'
print(dic)
# (5)、删除字典 dic 中的键值对"k1","v1",并输出删除后的字典 dic
dic.pop("k1")
print(dic)
# (6)、获取字典 dic 中“k2”对应的值
print(dic["k2"])
students = [
{'name':'小明','age':18,'score':98,'tel':'18888888888','gender':'female'},
{'name':'大名','age':20,'score':95,'tel':'18888888889','gender':'unkown'},
{'name':'汤姆','age':18,'score':88,'tel':'18888888810','gender':'male'},
{'name':'杰克','age':16,'score':58,'tel':'18888888811','gender':'unkown'},
{'name':'山姆','age':19,'score':78,'tel':'18888888812','gender':'male'},
{'name':'麦克','age':17,'score':92,'tel':'18888888813','gender':'male'},
]
# 1.统计及格学生的个数
j=0
for i in students:
if(i['score']>=60):
j+=1
print(j)
# 2.将女性改为男性
for i in students:
if(i['gender']=='female'):
i.update({'gender':'male'})
print(i)