为什么使用集合?
通过特性来分析:
局限:它们都支持重复元素
如果场景需要对内容做去重处理,列表、元组、字符串就不方便了
而集合,最主要的特点就是:不支持元素重复(自带去重功能)、并且内容无序
基本语法:
# 定义集合字面量
{元素, 元素, ..., 元素}
# 定义集合变量
变量名称 = {元素, 元素, ..., 元素}
# 定义空集合
变量名称 = 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'>
因为集合是无需的,所以集合不支持:下标索引访问
但是集合和列表一样,是允许修改的,所以我们来看看集合的修改方法
语法:集合.add(元素) 将指定元素,添加到集合内
结果:集合本身被修改,添加了新元素
# 添加元素
my_set = {"hi", "hello", "python"}
my_set.add("你好")
my_set.add("python")
print(f"my_set添加元素后的结果是:{my_set}")
运行效果:
my_set添加元素后的结果是:{'python', 'hi', '你好', 'hello'}
语法:集合.remove(元素) 将指定元素,从集合内移除
结果:集合本身被修改,移除了元素
# 移除元素
my_set = {"hi", "hello", "python"}
my_set.remove("hi")
print(f"移除结果:{my_set}")
运行效果:
移除结果:{'python', 'hello'}
语法:集合.pop() 从集合中随机取出一个元素
结果:会得到一个元素的结果。同时集合本身被修改,元素被移除
# 随机取出一个元素
my_set = {"hi", "hello", "python"}
element = my_set.pop()
print(f"集合被取出的元素是:{element},取出元素后:{my_set}")
语法:集合.clear() 清空集合
结果:集合本身被清空
# 清空集合 clear
my_set.clear()
print(f"集合被清空啦,结果是:{my_set}")
语法:集合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}
语法:集合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}
语法:集合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}
语法: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}
集合不支持下标索引,不能用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}")