常见的数据类型:
-
dict,字典类型
-
set,集合类型
-
float,浮点类型(浮点型)
目标:掌握字典、集合、浮点类型相关知识。
课程概要:
-
set集合,一个不允许重复重复 & 可变类型(元素可哈希)。
-
dict字典,一个容器且元素必须是键值对。
-
float类型,我们生活中常见的小数。
1.集合(set)
集合是一个 无序 、可变、不允许数据重复的容器。
1.1 定义
-
无序,无法通过索引取值。
-
可变,可以添加和删除元素。
-
不允许数据重复。
一般什么时候用集合呢?
就是想要维护一大堆不重复的数据时,就可以用它。比如:做爬虫去网上找图片的链接,为了避免链接重复,可以选择用集合去存储链接地址。
注意:定义空集合时,只能使用v = set()
,不能使用 v={}
(这样是定义一个空字典)。
1.2 独有功能
-
添加元素
-
删除元素
-
交集
-
并集
-
差集
1.3 公共功能
-
减,计算差集
-
&,计算交集
-
|,计算并集
-
长度
-
for循环
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出现在集合中会有如下现象:
强插:None类型
Python的数据类型中有一个特殊的值None,意味着这个值啥都不是 或 表示空。 相当于其他语言中 null
作用一样。
在一定程度上可以帮助我们去节省内存。例如:
注意:暂不要考虑Python内部的缓存和驻留机制。
目前所有转换为布尔值为False的值有:
2.字典(dict)
字典是 无序、键不重复 且 元素只能是键值对的可变的 个 容器。
data = { "k1":1, "k2":2 }
-
容器
-
元素必须键值对
-
键不重复,重复则会被覆盖
-
无序(在Python3.6+字典就是有序了,之前的字典都是无序。)
2.1 定义
字典中对键值得要求:
-
键:必须可哈希。 目前为止学到的可哈希的类型:int/bool/str/tuple;不可哈希的类型:list/set/dict。(集合)
-
值:任意类型。
一般在什么情况下会用到字典呢?
当我们想要表示一组固定信息时,用字典可以更加的直观,例如:
2.2 独有功能
-
获取值
# 案例:
# 案例:
# 案例:
# 写代码的准则:简单的逻辑处理放在前面;复杂的逻辑放在后面。
-
所有的键
注意:在Python2中 字典.keys()直接获取到的是列表,而Python3中返回的是
高仿列表
,这个高仿的列表可以被循环显示。 -
所有的值
注意:在Python2中 字典.values()直接获取到的是列表,而Python3中返回的是高仿列表,这个高仿的列表可以被循环显示。
-
所有的键值
-
设置值
-
更新字典键值对
-
移除指定键值对
-
按照顺序移除(后进先出)
-
py3.6后,popitem移除最后的值。
-
py3.6之前,popitem随机删除。
-
2.3 公共功能
-
求
并集
(Python3.9新加入) -
长度
-
是否包含
-
索引(键) 字典不同于元组和列表,字典的索引是
键
,而列表和元组则是0、1、2等数值
。 -
根据键 修改值 和 添加值 和 删除键值对 上述示例通过键可以找到字典中的值,通过键也可以对字典进行添加和更新操作
-
for循环 由于字典也属于是容器,内部可以包含多个键值对,可以通过循环对其中的:键、值、键值进行循环;
2.4 转换
想要转换为字典.
1.5 其他
1.5.1 存储原理
1.5.2 速度快
1.5.3 嵌套
我们已学了很多数据类型,在涉及多种数据类型之间的嵌套时,需注意一下几点:
-
字典的键必须可哈希(list/set/dict不可哈希)。
-
字典的值可以是任意类型。
-
字典的键和集合的元素在遇到 布尔值 和 1、0 时,需注意重复的情况。
-
元组的元素不可以被替换。
3.浮点型(float)
浮点型,一般在开发中用于表示小数。
关于浮点型的其他知识点如下:
-
在类型转换时需要,在浮点型转换为整型时,会将小数部分去掉。
-
想要保留小数点后N位
-
浮点型的坑(所有语言中)
底层原理视频:
在项目中如果遇到精确的小数计算应该怎么办?
总结
-
集合,是 无序、不重复、元素必须可哈希、可变的一个容器(子孙元素都必须是可哈希)。
-
集合的查找速度比较快(底层是基于哈希进行存储)
-
集合可以具有 交并差 的功能。
-
字典是 无序、键不重复 且 元素只能是键值对的可变的一个容器(键子孙元素都必须是可哈希)。
-
py3.6+之后字典就变为有序了。
-
py3.9 新增了一个
{} | {}
运算。 -
字典的常见功能。
-
在python2和python3中,字典的 keys() 、values()、items() 三个功能获取的数据类型不一样。
-
None是代表内存中的一个空值。
0 "" [] or list() () or tuple() set() None {} or dict()
-
浮点型用于表示小数,但是由于其内部存储原理可能会引发数据存储不够精准。