Python 中的集合,与数学中的集合是一样的。集合跟 “字典” 非常相似,同样也是使用大括号 “{}” 来创建的。但实际上两者有本质上的区别:集合只有值(value)没有键(key),字典有值(value)也有键(key)。

Python 创建集合
在 Python 中,我们也是使用大括号 “{}” 来创建一个集合。
语法:
setname = { value1, value2, ... , valueN }说明:
集合是由多个值组成的,两个值之间用英文逗号(,)隔开。对于集合,小伙伴们需要注意以下 3 点。
- 集合不会出现相同的值,如果有相同的值,则只会保留一个,这个跟数学中的集合一样。
- 序列(列表、元组、字符串)是有序的,现今版本(Python 3.7+)的字典也是记住插入顺序的,唯独集合是绝对无序的。
- 因为集合是完全无序的,所以它不能像列表或字符串那样通过下标(索引)的方式来获取某一个元素。
示例 1:创建集合
items = set() # 创建一个空集合
items = {3, 1, 2, 5, 4} # 创建一个包含 5 个值的集合分析:
空集合不是使用大括号 “{}” 来创建的,因为空字典已经占用了。想要创建空集合,应该使用 set() 函数来创建,这是很重要的一个知识点。
示例 2:打印集合
items = {'apple', 'banana', 'orange', 'apple'}
print(items)运行结果如下(你的运行结果可能与下面不同)。
{'orange', 'apple', 'banana'}分析:
在集合中,如果有相同的值(如 'apple'),则只会保留一个。此外,因为集合是绝对无序的,所以当我们使用 print() 打印一个集合时,元素的先后顺序是随机的
所以小伙伴们不要因为偶尔输入几个小数字看起来像排了序,就误以为集合会自动排列,那只是 Python 底层哈希算法造成的巧合。
Python 集合基本操作
由于集合是无序的,因此不能使用下标的方式来获取某一项的值。不过,集合有些操作与列表操作是相似的,接下来给大家一一介绍。
示例 3:获取集合长度
items = {3, 1 ,2, 5, 4}
print(len(items))运行结果如下。
5示例 4:in 和 not in
items = {3, 1 ,2, 5, 4}
print(3 in items)
print(10 not in items)运行结果如下。
True
True示例 5:将集合转换为列表
items = {3, 1 ,2, 5, 4}
result = list(items)
print(result)
print(type(result))运行结果如下。
[1, 2, 3, 4, 5]
<class 'list'>示例 6:清空集合 clear()
items = {'red', 'orange', 'yellow'}
items.clear()
print(items)运行结果如下。
set()分析:
除了使用 clear() 方法之外,还可以将一个空集合赋值给变量,从而达到清空集合的目的。
items = {'red', 'orange', 'yellow'}
items = set()
print(items) # 输出:set()Python 集合的应用场景
在 Python 中,如果不借助集合,想要实现列表去重是一件比较麻烦的事。我们可以先看一下常规做法是怎样实现的。
示例 7:常规方法实现列表去重
items = ['red', 'red', 1, 1, 2, False]
result = []
for item in items:
if item not in result:
result.append(item)
print(result)运行结果如下。
['red', 1, 2, False]分析:
在上面示例中,首先我们定义了一个空列表 result 用于保存结果。接下来遍历列表 items,如果当前元素不存在于 result 中,那么就把当前元素添加到 result 中。最后得到的 result 就是去重的列表了。
示例 8:集合实现列表去重
items_list = ['red', 'red', 1, 1, 2, False]
items_set = set(items_list)
result = list(items_set)
print(result)运行结果如下。
[False, 1, 2, 'red']分析:
set() 函数可以将一个列表转换为一个集合,set(items_list) 的结果就是:{'red', 1, 2, False}。然后再使用 list() 函数来将一个集合转换为一个列表。对于这个例子来说,我们甚至只需要用到两句代码就可以实现了。
items_list = ['red', 'red', 1, 1, 2, False]
print(list(set(items_list)))多说一点
到现在为止,小伙伴们已经把 Python 所有的数据类型都学完了。很多小伙伴觉得平常只会用到数字、字符串等,而其他数据类型却很少用得到,然后就会问了:“我们有必要把每一个数据类型都认真掌握吗?” 我可以很肯定地告诉大家:“那是必须的!”
任何数据类型都有自己的适用场景,只是在初学阶段用得不是那么多而已。从事过开发工作的人都知道,在技术上升时总会遇到瓶颈期。之所以会这样,其实主要有两个重要的原因:一是基础不够扎实,二是视野不够开阔。为了打牢基础,我们应该把每一种数据类型都牢记于心,这样才能在实际开发中做到游刃有余。
