数据容器:set(集合)
- 为什么使用集合?通过特性来分析:
- 列表可修改、支持重复元素 且 有序
- 元组、字符串不可修改、支持重复元素且有序
- 局限:它们都支持重复元素
集合的定义
基本语法:
# 定义集合字面量 {元素, 元素, ..., 元素} # 定义集合变量 变量名称 = {元素, 元素, ..., 元素} # 定义空集合 变量名称 = set()
和列表、元组、字符串等定义基本相同:
- 列表:[]
- 元组:()
- 字符串:“”
- 集合:{}
# 定义集合 my_set = {"hi", "hello", "python", "hi", "hello", "python", "hi", "hello", "python"} my_set_empty = set() # 定义空集合 print(f"my_set的内容是:{my_set},类型是{type(my_set)}") print(f"my_set_empty的内容是:{my_set_empty},类型是{type(my_set_empty)}") 运行效果: my_set的内容是:{'hi', 'python', 'hello'},类型是<class 'set'> my_set_empty的内容是:set(),类型是<class 'set'>
集合的常用操作-修改
因为集合是无需的,所以集合不支持:下标索引访问
但是集合和列表一样,是允许修改的,所以我们来看看集合的修改方法
(1)添加新元素
语法:集合.add(元素) 将指定元素,添加到集合内
结果:集合本身被修改,添加了新元素
# 添加元素 my_set = {"hi", "hello", "python"} my_set.add("你好") my_set.add("python") print(f"my_set添加元素后的结果是:{my_set}") 运行效果: my_set添加元素后的结果是:{'python', 'hi', '你好', 'hello'}
(2)移除元素
语法:集合.remove(元素) 将指定元素,从集合内移除
结果:集合本身被修改,移除了元素
# 移除元素 my_set = {"hi", "hello", "python"} my_set.remove("hi") print(f"移除结果:{my_set}") 运行效果: 移除结果:{'python', 'hello'}
(3)从集合中随机取出元素
语法:集合.pop() 从集合中随机取出一个元素
结果:会得到一个元素的结果。同时集合本身被修改,元素被移除
# 随机取出一个元素 my_set = {"hi", "hello", "python"} element = my_set.pop() print(f"集合被取出的元素是:{element},取出元素后:{my_set}")
(4)清空集合
语法:集合.clear() 清空集合
结果:集合本身被清空
# 清空集合 clear my_set.clear() print(f"集合被清空啦,结果是:{my_set}")
(5)取出 两个集合的差集
语法:集合1.difference(集合2) 以集合1为基准,取出集合1和集合2的差集(集合1有 而集合2没有的)
结果:得到一个新集合,集合1和集合2不变
# 取出两个集合的差集 set1 = {1, 2, 3} set2 = {1, 5, 6} set3 = set1.difference(set2) print(f"取出差集后的结果是:{set3}") print(f"取差集后,原有set1的内容:{set1}") print(f"取差集后,原有set2的内容:{set2}") 运行效果: 取出差集后的结果是:{2, 3} 取差集后,原有set1的内容:{1, 2, 3} 取差集后,原有set2的内容:{1, 5, 6}
(6)消除 两个集合的差集
语法:集合1.difference_update(集合2)
功能:对比集合1 和 集合2,在集合1内,删除和集合2相同的元素
结果:集合1被修改,集合2不变
# 消除 两个集合的差集 set1 = {1, 2, 3} set2 = {1, 5, 6} set3 = set1.difference_update(set2) print(f"消除差集后的结果是:{set3}") print(f"取差集后,原有set1的内容:{set1}") print(f"取差集后,原有set2的内容:{set2}") 运行效果: 消除差集后的结果是:None 取差集后,原有set1的内容:{2, 3} 取差集后,原有set2的内容:{1, 5, 6}
(7)两个集合 合并
语法:集合1.union(集合2)
功能:将集合1和集合2组合成新集合
结果:得到新集合,集合1和集合2不变
# 两个集合合并 set1 = {1, 2, 3} set2 = {1, 5, 6} set3 = set1.union(set2) print(f"合并后的结果是:{set3}") print(f"此时原有set1的内容:{set1}") print(f"此时原有set2的内容:{set2}") 运行效果: 合并后的结果是:{1, 2, 3, 5, 6} 此时原有set1的内容:{1, 2, 3} 此时原有set2的内容:{1, 5, 6}
(8)统计集合元素数量len()
语法:len(集合)
功能:语法:得到一个正式,记录了集合的元素数量
# 统计集合元素数量len() set1 = {1, 2, 3, 4, 5} num = len(set1) print(f"集合1内元素的数量有:{num}个") set2 = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5} num = len(set2) print(f"集合2内元素的数量有:{num}个,集合内容是:{set2}") 运行效果: 集合1内元素的数量有:5个 集合2内元素的数量有:5个,集合内容是:{1, 2, 3, 4, 5}
(9)集合的遍历
集合不支持下标索引,不能用while循环
可以用for循环
# 集合的遍历 # 集合不支持下标索引,不能用while循环 # 可以用for循环 set1 = {1, 2, 3, 4, 5} for element in set1: print(f"集合中的元素:{element}")
集合的特点
- 可以容纳多个数据
- 可以容纳不同类型的数据(混装)
- 数据是无序存储的(不支持下标索引)
- 不允许重复数据存在(去重)
- 可以修改(增加或删除元素等)
- 支持for循环,不支持while循环
- 练习案例:信息去重
""" 集合练习:信息去重 """ # 有如下列表对象 my_list = ["hi", "hello", "hi", "hi", "python"] # 定义一个空集合 my_set = set() # 通过for循环遍历列表 for element in my_list: # 在for循环中将列表的元素添加至集合 my_set.add(element) # 最终得到元素去重后的集合对象,并打印输出 print(f"列表的内容是:{my_list}") print(f"去重后的集合对象:{my_set}")