文章目录
- 【4.5】数据容器:set集合
- 一、集合的定义格式
- 二、集合的特点
- 三、集合的常见操作
- 四、集合的遍历
【4.5】数据容器:set集合
一、集合的定义格式
为什么使用集合
我们目前接触到了列表、元组、字符串三个数据容器了。基本满足大多数的使用场景。为什么又需要学习集合类型呢?
通过特点来分析:
1.列表可修改,支持重复元素且有序;
2.元组、字符串不可修改,支持重复元素且有序。
能否看出它们的局限性?
局限就在于:它们都支持重复元素。
如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。
而集合,最主要的特点就是:不支持元素重复(自带去重功能),并且内容无序。
集合的定义
基本语法:
# 定义集合字面量
{元素, 元素, ..., 元素}
# 定义集合变量
变量名称 = {元素, 元素, ..., 元素}
# 定义空集合
变量名称 = set()
和列表、元组、字符串等定义基本相同:
- 列表使用
[]
- 元组使用
()
- 字符串使用
""
- 集合使用
{}
示例:
my_set = {"A", "B", "C", "A", "B", "C", "A", "B", "C"}
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的内容是:{'A', 'C', 'B'},类型是:<class 'set'>
my_set_empty的内容是:set(),类型是:<class 'set'>
可见,对于集合,是不允许重复的,会自动去重。并且是无序的,输出的顺序与原本内容顺序是不一致的。
二、集合的特点
集合有如下特点:
- 可以容纳多个数据;
- 可以容纳不同类型的数据;
- 数据是无序存储的(不支持下标索引);
- 不允许重复数据存在;
- 可以修改;
- 支持for循环。
三、集合的常见操作
首先,因为集合是无序的,所以集合不支持下标索引访问。
但是集合和列表一样,是允许修改的。
- 添加新元素
# 语法
集合.add(元素)
将指定元素,添加到集合内。
my_set = {"Hello", "World"}
my_set.add("zhangsan")
print(my_set) # {'zhangsan', 'Hello', 'World'}
结果:集合本身被修改,添加了新元素。
- 移除元素
# 语法
集合.remove(元素)
将指定元素,从集合内移除。
my_set = {"Hello", "World", "zhangsan"}
my_set.remove("Hello")
print(my_set) # {'zhangsan', 'World'}
- 从集合中随机取出元素
# 语法
集合.pop()
从集合中随机取出一个元素。(注意,这个随机不是指同一段程序多次执行、每次运行结果都不一样。而是指我们并不知道它给我们取出的元素是哪一个,这种“随机”)
my_set = {"Hello", "World", "zhangsan"}
element = my_set.pop()
print(my_set) # {'Hello', 'World'}
print(element) # zhangsan
- 清空集合
my_set = {"Hello", "World", "zhangsan"}
my_set.clear()
print(my_set) # set()
- 取出2个集合的差集
# 语法
集合1.difference(集合2)
取出集合1和集合2的差集(即:集合1有,而集合2没有的)。
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.difference(set2)
print(set3) # {2, 3}
print(set1) # {1, 2, 3}
print(set2) # {1, 5, 6}
结果:得到一个新集合,原有的集合1和集合2不变。
- 消除2个集合的差集
# 语法
集合1.difference_update(集合2)
对比集合1和集合2,在集合1内,删除和集合2相同的元素。
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set1.difference_update(set2)
print(set1) # {2, 3}
print(set2) # {1, 5, 6}
结果:集合1被修改,集合2不变。
- 2个集合合并
# 语法
集合1.union(集合2)
将集合1和集合2组合成新集合。
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.union(set2)
print(set3) # {1, 2, 3, 5, 6}
print(set1) # {1, 2, 3}
print(set2) # {1, 5, 6}
结果:得到新集合,原有的集合1和集合2不变。
- 统计集合元素数量
set1 = {1, 2, 3, 4, 5}
num = len(set)
print(num) # 5
set2 = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5}
num = len(set)
print(num) # 5
四、集合的遍历
集合不支持下标索引,因此不能用while循环。
但是可以用for循环。
set = {1, 2, 3, 4, 5}
for element in set:
print(f"集合的元素有:{element}")