原文件下载路径:
编程教育Python基础数据类型详解:集合、字典与浮点型的功能特性及应用场景
day07 数据类型(下)
常见的数据类型:
- int,整数类型(整形)
- bool,布尔类型
- str,字符串类型
- list,列表类型
- tuple,元组类型
- dict,字典类型
- set,集合类型
- float,浮点类型(浮点型)
目标:掌握字典、集合、浮点类型相关知识。
课程概要:
- set集合,一个不允许重复重复 & 可变类型(元素可哈希)。
- dict字典,一个容器且元素必须是键值对。
- float类型,我们生活中常见的小数。
1.集合(set)
集合是一个 无序 、可变、不允许数据重复的容器。
1.1 定义
v1 = {
11, 22, 33, "zzc" }
-
无序,无法通过索引取值。
-
可变,可以添加和删除元素。
v1 = { 11,22,33,44} v1.add(55) print(v1) # {11,22,33,44,55}
-
不允许数据重复。
v1 = { 11,22,33,44} v1.add(22) print(v1) # {11,22,33,44}
一般什么时候用集合呢?
就是想要维护一大堆不重复的数据时,就可以用它。比如:做爬虫去网上找图片的链接,为了避免链接重复,可以选择用集合去存储链接地址。
注意:定义空集合时,只能使用v = set()
,不能使用 v={}
(这样是定义一个空字典)。
v1 = []
v11 = list()
v2 = ()
v22 = tuple()
v3 = set()
v4 = {
} # 空字典
v44 = dict()
1.2 独有功能
-
添加元素
data = { "刘嘉玲", '关之琳', "王祖贤"} data.add("郑裕玲") print(data)
data = set() data.add("周杰伦") data.add("林俊杰") print(data)
-
删除元素
data = { "刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"} data.discard("关之琳") print(data)
-
交集
s1 = { "刘能", "赵四", "⽪⻓⼭"} s2 = { "刘科⻓", "冯乡⻓", "⽪⻓⼭"} s4 = s1.intersection(s2) # 取两个集合的交集 print(s4) # {"⽪⻓⼭"} s3 = s1 & s2 # 取两个集合的交集 print(s3)
-
并集
s1 = { "刘能", "赵四", "⽪⻓⼭"} s2 = { "刘科⻓", "冯乡⻓", "⽪⻓⼭"} s4 = s1.union(s2) # 取两个集合的并集 {"刘能", "赵四", "⽪⻓⼭","刘科⻓", "冯乡⻓", } print(s4) s3 = s1 | s2 # 取两个集合的并集 print(s3)
-
差集
s1 = { "刘能", "赵四", "⽪⻓⼭"} s2 = { "刘科⻓", "冯乡⻓", "⽪⻓⼭"} s4 = s1.difference(s2) # 差集,s1中有且s2中没有的值 {"刘能", "赵四"} s6 = s2.difference(s1) # 差集,s2中有且s1中没有的值 {"刘科⻓", "冯乡⻓"} s3 = s1 - s2 # 差集,s1中有且s2中没有的值 s5 = s2 - s1 # 差集,s2中有且s1中没有的值 print(s5,s6)
1.3 公共功能
-
减,计算差集
s1 = { "刘能", "赵四", "⽪⻓⼭"} s2 = { "刘科⻓", "冯乡⻓", "⽪⻓⼭"} s3 = s1 - s2 s4 = s2 - s1 print(s3) print(s4)
-
&,计算交集
s1 = { "刘能", "赵四", "⽪⻓⼭"} s2 = { "刘科⻓", "冯乡⻓", "⽪⻓⼭"} s3 = s1 & s2 print(s3)
-
|,计算并集
s1 = { "刘能", "赵四", "⽪⻓⼭"} s2 = { "刘科⻓", "冯乡⻓", "⽪⻓⼭"} s3 = s1 | s2 print(s3)
-
长度
v = { "刘能", "赵四", "尼古拉斯"} data = len(v) print(data)
-
for循环
v = { "刘能", "赵四", "尼古拉斯"} for item in v: print(item)
1.4 转换
其他类型如果想要转换为集合类型,可以通过set进行转换,并且如果数据有重复自动剔除。
提示:int/list/tuple/dict都可以转换为集合。
v1 = "刘亦菲"
v2 = set(v1)
print(v2) # {"武","沛","齐"}
v1 = [11,22,33,11,3,99,22]
v2 = set(v1)
print(v2) # {11,22,33,3,99}
v1 = (11,22,3,11)
v2 = set(v1)
print(v2) # {11,22,3}
提示:这其实也是去重的一个手段。
data = {
11,22,33,3,99}
v1 = list(data) # [11,22,33,3,99]
v2 = tuple(data) # (11,22,33,3,99)
1.5 其他
1.5.1 集合的存储原理
1.5.2 元素必须可哈希
因存储原理,集合的元素必须是可哈希的值,即:内部通过通过哈希函数把值转换成一个数字。
目前可哈希的数据类型:int、bool、str、tuple,而list、set是不可哈希的。
总结:集合的元素只能是 int、bool、str、tuple 。
-
转换成功
v1 = [11,22,33,11,3,99,22] v2 = set(v1) print(v2) # {11,22,33,3,99}
-
转换失败
v1 = [11,22,["zzc","eric"],33] v2 = set(v1) # 报错 print(v2)
1.5.3 查找速度特别快
因存储原理特殊,集合的查找效率非常高(数据量大了才明显)。
-
低
user_list = ["刘亦菲","zzc","李璐"] if "zzc" in user_list: print("在") else: print("不在") user_tuple = ("刘亦菲","zzc","李璐") if "zzc" in user_tuple: print("在") else: pr