前言
在 Python 中,数据容器是组织和管理数据的重要工具,集合作为其中一种基本的数据结构,具有独特的特性和广泛的应用。本章详细介绍了集合的定义、常用操作以及遍历方法。
本篇文章参考:黑马程序员
一、集合的定义
我们目前已经学习了列表、元组、字符串三个数据容器了,基本能满足大多数的使用场景,但为何又需要学习新的集合类型呢?
通过特性来分析:
- 列表可修改、支持重复元素且有序
- 元组、字符串不可修改、支持重复元素且有序
我们发现列表、元组、字符串这三个数据容器局限在于它们都支持重复元素。如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。而集合最主要的特点就是不支持元素的重复(自带去重功能)并且内容无序。
①基本语法:
定义集合使用花括号“{}”,且使用逗号隔开各个数据,数据可以是不同的数据类型。
- 定义字面量: {元素1,元素2,元素3,元素4,...}
- 定义变量: 变量名称 = {元素1,元素2,元素3,元素4,…}
- 定义空元组: 变量名称 =set()
②特点:
- 可容纳多个数据
- 可容纳不同类型的数据(混装)
- 可修改(增加或删除元素等)
- 数据是无序存储的(不支持下标索引)
- 不允许重复数据存在
- 支持for循坏,不支持while循坏
# 定义集合
my_set={"A","B","C","B","A"}
# 定义一个空集合
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'>
二、集合的常用操作(方法)
因为集合是无序的,所以集合不支持下标索引访问。
集合的常用方法:
①添加元素:
将指定元素,添加到集合内,集合本身被修改。
语法:集合.add(元素)
代码语言:python代码运行次数:0复制# 添加新元素
my_set={"A","B","C"}
my_set.add("D")
my_set.add("A")
print(f"my_set添加元素后结果为{my_set}")
输出结果:
my_set添加元素后结果为{'A', 'C', 'D', 'B'}
②移除元素:
将指定元素,从集合内移除,集合本身被修改。
语法:集合.remove(元素)
代码语言:python代码运行次数:0复制# 移除元素
my_set={"A","B","C"}
my_set.remove("A")
print(f"my_set移除元素后结果为{my_set}")
输出结果:
my_set移除元素后结果为{'C', 'B'}
③随机取出元素:
从集合中随机取出一个元素,得到一个元素的结果,同时集合本身被修改,元素被移除。
语法:集合.pop()
代码语言:python代码运行次数:0复制# 随机取出一个元素
my_set={"A","B","C"}
element=my_set.pop()
print(f"集合被取出的元素是{element},my_set移除元素后结果为{my_set}")
输出结果:
集合被取出的元素是A,my_set移除元素后结果为{'C', 'B'}
④清空集合:
清空集合。
语法:集合.clear()
代码语言:python代码运行次数:0复制my_set={"A","B","C"}
my_set.clear()
print(f"my_set被清空后结果为{my_set}")
输出结果:
my_set被清空后结果为set()
⑤取出两个集合的差集:
取出集合1和集合2的差集(集合1有而集合2没有的),得到一个新集合,集合1和集合2不变。
语法:集合1.difference(集合2)
代码语言:python代码运行次数:0复制# 取两个集合的差集
set1={1,2,3}
set2={4,2,7}
set3=set1.difference(set2)
print(f"取出差集后结果为{set3}")
print(f"取出差集后,set1内容为{set1}")
print(f"取出差集后,set2内容为{set2}")
输出结果:
取出差集后结果为{1, 3}
取出差集后,set1内容为{1, 2, 3}
取出差集后,set2内容为{2, 4, 7}
⑥消除两个集合的差集:
对比集合1和集合2,在集合1内删除和集合2相同的元素,集合1被修改,集合2不变。
语法:集合1.difference_update(集合2)
代码语言:python代码运行次数:0复制# 消除差集
set1={1,2,3}
set2={4,2,7}
set1.difference_update(set2)
print(f"消除差集后,set1内容为{set1}")
print(f"消除差集后,set2内容为{set2}")
输出结果:
消除差集后,set1内容为{1, 3}
消除差集后,set2内容为{2, 4, 7}
⑦两个集合合并:
将集合1和集合2组合成新集合,得到新集合,集合1和集合2不变。
语法:集合1.union(集合2)
代码语言:python代码运行次数:0复制# 两个集合合并
set1={1,2,3}
set2={4,2,7}
set3=set1.union(set2)
print(f"两个集合合并后结果为{set3}")
print(f"两个集合合并后,set1内容为{set1}")
print(f"两个集合合并后,set2内容为{set2}")
输出结果:
两个集合合并后结果为{1, 2, 3, 4, 7}
两个集合合并后,set1内容为{1, 2, 3}
两个集合合并后,set2内容为{2, 4, 7}
⑧统计集合长度:
统计集合内有多少元素,得到一个整数结果。
语法:len(集合)
代码语言:python代码运行次数:0复制# 统计集合长度
set1={1,2,3}
num=len(set1)
print(f"集合内的元素数量为{num}")
输出结果:
集合内的元素数量为3
三、集合的遍历
集合不支持下标索引,所以不支持使用while循环,但是支持使用for循环遍历。
for循坏遍历:
代码语言:python代码运行次数:0复制# 集合的遍历
# 集合不支持下标索引,所以不能用while循坏,可用for循坏
set1={1,2,3}
for element in set1:
print(f"集合的元素有{element}")
输出结果:
集合的元素有1
集合的元素有2
集合的元素有3
【例题】
有如下列表对象:
my_list = ['新闻', '传播', '新闻', '传播', 'Hi', 'Python', 'Hi', 'Python', 'best',请按如下要求操作:
1.定义一个空集合
2.通过for循环遍历列表
3.在for循环中将列表的元素添加至集合
4.最终得到元素去重后的集合对象,并打印输出
代码语言:python代码运行次数:0复制my_list = ['新闻', '传播', '新闻', '传播', 'Hi', 'Python', 'Hi', 'Python', 'best']
# 定义一个空集合
my_set=set()
# 通过for循坏遍历列表
for element in my_list:
# 在for循坏中将列表元素添加至集合
my_set.add(element)
print(f"列表的内容为{my_list}")
print(f"通过for循坏得到的集合为{my_set}")
输出结果:
列表的内容为'新闻', '传播', '新闻', '传播', 'Hi', 'Python', 'Hi', 'Python', 'best'
通过for循坏得到的集合为{'Hi', '传播', '新闻', 'Python', 'best'}