python数据类型(集合、字典、浮点型)
常见的数据类型:
- int,整数类型(整形)
- bool,布尔类型
- str,字符串类型
- list,列表类型
- tuple,元组类型
- dict,字典类型
- set,集合类型
- float,浮点类型(浮点型)
目标:掌握字典、集合、浮点类型相关知识。
课程概要:
- set集合,一个不允许重复重复 & 可变类型(元素可哈希)。
- dict字典,一个容器且元素必须是键值对。
- float类型,我们生活中常见的小数。
1.集合(set)
集合是一个 无序 、可变、不允许数据重复的容器。
1.1 定义
- 定义空集合时,只能使用
v = set()
,不能使用v={}
(这样是定义一个空字典)
v1=set()
v1={11,22,33}
-
无序,无法通过索引取值。
-
可变,可以添加和删除元素。
v1.add()
-
不允许数据重复。(想要维护一大堆不重复的数据时,可以用集合)
1.2 独有功能
1.2.1 添加元素
- data.add()
1.2.1 删除元素
- data.discard()
1.2.3 交集
- s4 = s1.intersection(s2) # 取两个集合的交集
- s4 = s1 & s2 # 取两个集合的交集
1.2.4 并集
- s4 = s1.union(s2) # 取两个集合的并集
- s4 = s1 | s2 # 取两个集合的并集
1.2.5 差集
- s4 = s1.difference(s2) 差集,s1中有,且s2中没有的值
- s3 = s1 - s2 差集,s1中有,且s2中没有的值
1.3 公共功能
1.3.1 减,计算差集
- s4 = s2 - s1
1.3.2 计算交集 &
- s4 = s1 & s2
1.3.3 计算并集 |
- s4= s1 | s2
1.3.4 长度
- data = len(v)
1.3.5 for循环
for item in v:
print(item)
1.4 转换
- 其他类型如果想要转换为集合类型,可以通过set进行转换,并且如果数据有重复自动剔除。
提示:int/list/tuple/dict都可以转换为集合。(其实也是去重的一个手段)
1.5其他
1.5.1 集合的存储原理
- 利用哈希函数变为一个数值,取余数,找索引位置。
1.5.2 元素必须可哈希
- 因存储原理,集合的元素必须是可哈希的值,即:内部通过哈希函数把值转换成一个数字。
- 目前可哈希的数据类型:int、bool、str、tuple,而list、set是不可哈希的。
- 总结:集合的元素只能是 int、bool、str、tuple 。
1.5.3 查找速度特别快
- 因存储原理特殊,集合的查找效率非常高(数据量大了才明显)。
1.5.4 比对和嵌套
类型 | 是否可变 | 是否有序 | 元素要求 | 是否可哈希 | 转换 | 定义空 |
---|---|---|---|---|---|---|
list | 是 | 是 | 无 | 否 | list(其他) | v=[]或v=list() |
tuple | 否 | 是 | 无 | 是 | tuple(其他) | v=()或v=tuple() |
set | 是 | 否 | 可哈希 | 否 | set(其他) | v=set() |
-
注意:由于True和False本质上存储的是 1 和 0 ,而集合又不允许重复,所以在整数 0、1和False、True出现在集合中会有如下现象:
v1 = {True, 1} print(v1) # {True}
强插:None类型
-
Python的数据类型中有一个特殊的值None,意味着这个值啥都不是 或 表示空。 相当于其他语言中
null
作用一样。 -
在一定程度上可以帮助我们去节省内存。
-
注意:暂不要考虑Python内部的缓存和驻留机制。
-
目前所有转换为布尔值为False的值有:
0
""
[] or list()
() or tuple()
set()
None
2.字典
字典是 无序、键不重复 且 元素只能是键值对的可变的 个 容器。
data = { "k1":1, "k2":2 }
-
容器
-
元素必须键值对
-
键不重复,重复则会被覆盖
-
无序(在Python3.6+字典就是有序了,之前的字典都是无序。)
2.1 定义
v1 = {}
v2 = dict()
字典中对键值得要求:
- 键:必须可哈希。 目前为止学到的可哈希的类型:int/bool/str/tuple;不可哈希的类型:list/set/dict。(集合)
- 值:任意类型。
# 不合法
v1 = {
[1, 2, 3]: '周杰伦',
"age" : 18
- 一般在什么情况下会用到字典呢?(当我们想要表示一组固定信息时,用字典可以更加的直观)
2.2 独有功能
2.2.1 获取值
- .get()
# 例子
user_list = {
"wupeiqi": "123",
"alex": "uk87",
}
username = input("请输入用户名:")
password = input("请输入密码:")
# None,用户名不存在
# 密码,接下来比较密码
pwd = user_list.get(username)
if pwd == None:
print("用户名不存在")
else:
if password == pwd:
print("登录成功")
else:
print("密码错误")
# 写代码的准则:简单的逻辑处理放在前面;复杂的逻辑放在后面。
2.2.2 所有的键
-
.keys() (获取字典的所有键)
-
注意:在Python2中 字典.keys()直接获取到的是列表,而Python3中返回的是
高仿列表
,这个高仿的列表可以被循环显示。(list)
2.2.3 所有的值
- .values()(获取字典所有的值)
- 注意:在Python2中 字典.values()直接获取到的是列表,而Python3中返回的是高仿列表,这个高仿的列表可以被循环显示。
2.2.4 所有的键值
- .items()(获取字典所有的键值)
- item是一个元组 (键,值)
2.2.5 设置值
- .setdefault(“键”, 值)
- 如果键存在,对应的值将不会修改,如果字典中没有对应的键,则会添加
2.2.6 更新字典键值对
-
.update( {“键”:值} )
-
字典中没有的键直接添加;有的键则更新值
2.2.7 移除指定键值对
- .pop(“键”)
2.2.8 按照顺序移除(后进先出)
- .popitem()
- py3.6后,popitem移除最后的值。
- py3.6之前,popitem随机删除。
2.3 公共功能
2.3.1 求并集 (Python3.9新加入)
- v3 = v1 | v2
2.3.2 长度
- data = len(info)
2.3.3 是否包含
- v1 = “age” in info
2.3.4 索引(键)
-
字典不同于元组和列表,字典的索引是
键
,而列表和元组则是0、1、2等数值
。 -
通过键为索引去获取之后时,键不存在会报错(以后项目开发时建议使用get方法根据键去获取值)
info = { "age":12, "status":True, "name":"武沛齐"} print( info["age"] ) # 输出:12 value = info.get("xxxxx") # None print(value)
2.3.5 修改
- 根据键 修改值 和 添加值 和 删除键值对
- 通过键可以找到字典中的值,通过键也可以对字典进行添加和更新操作
info = {"age": 12, "status": True, "name": "张三"}
if "age" in info:
# del info["age"] 可以用del或者pop
data = info.pop("age")
print(info)
print(data)
else:
print("键不存在")
2.3.6 for循环
- 由于字典也属于是容器,内部可以包含多个键值对,可以通过循环对其中的:键、值、键值进行循环;
info = {"age":12, "status":True,"name":"张三"}
for item in info:
print(item) # 所有键
info = {"age":12, "status":True,"name":"张三"}
for key,value in info.items():
print(key,value)
2.4 转换
-
想要转换为字典.
-
v = dict( )
info = { "age":12, "status":True, "name":"张三" } v1 = list(info) # ["age","status","name"] v2 = list(info.keys()) # ["age","status","name"] v3 = list(info.values()) # [12,True,"张三"] v4 = list(info.items()) # [ ("age",12), ("status",True), ("name","张三") ]
2.5 其他
2.5.1 存储原理
- 利用字典键找对应的值。
2.5.2 速度快
- 键唯一对应值
2.5.3 嵌套
- 字典的键必须可哈希(list/set/dict不可哈希)。
- 字典的值可以是任意类型。
- 字典的键和集合的元素在遇到 布尔值 和 1、0 时,需注意重复的情况。
- 元组的元素不可以被替换。
3.浮点型(float)
-
浮点型,一般在开发中用于表示小数。
-
关于浮点型的其他知识点如下:
- 在类型转换时需要,在浮点型转换为整型时,会将小数部分去掉。(int())
- 想要保留小数点后N位(round(V1,位数))
-
在项目中如果遇到精确的小数计算使用如下
import decimal v1 = decimal.Decimal("0.1") v2 = decimal.Decimal("0.2") v3 = v1 + v2 print(v3) # 0.3