0基础学Python之十七:集合

Hi 大家好,我是王可乐,欢迎和我一起0基础学Python。在前面几节课里,我们讲解了列表、元组和字典三个有趣的数据类型。今天,可乐将给大家介绍第四个集合性质的数据类型set,也就是“集合”。

之前我们在讲了字典类型后,有朋友问可乐一个问题:

“字典的唯一性非常好用,我可以往里放各种元素,字典可以自动保证没有关键词相同的元素。但是因为字典中的元素必须包含关键词和值,所以我必须对每个关键词都赋一个值,处理起来有点麻烦。”

“那你是不是需要一个元素只包含关键词,不包含值的字典?”

如果你也有类似的疑问,只需要学习一下本节课的内容就可以。因为今天我们要讲的数据类型,集合,就是一种“只有关键词的字典”。咱们还是先来看一下实例,首先我们看看集合类型是怎么初始化的:

可以看到,从初始化代码开始,集合类型就和我们之前介绍的数据类型不太一样。列表的初始化我们只要放一对中括号,元组是一对小括号,而字典则是一对大括号(要注意,因为元组是不能更新的,如果放了一对小括号,那就只能是一个空的元组了)。轮到了集合类型,英文字符里面已经没括号可用了,所以 Python 干脆直接通过set()的方式来定义。

这里我们先学会使用,等到你学习了我们后续的课程,就会了解 set() 背后的原理了。在初始化时,我们可以为集合传入一些初始的值。例如字符串:

这里,集合的打印形式也用了花括号来表示,只是其中的每一个元素只是单个元素,而字典的每一个元素都有用冒号分隔的关键字和值两部分。

和使用方括号、圆括号初始化列表、元组不同,集合初始化自动拆分了传入的字符串和列表。

实际上,初始化列表和元组也可以用相应的 list() 和 tuple() 这种类似函数的形式,行为和集合的初始化是一致的。这里我们呢就不展开讲这一点了,同学们可以自己尝试一下。由于字典中的元素是唯一的,所以,如果我们输入的字符串中包含重复的字母,最终在集合中的元素只能保留一个,比如:

集合数据类型还支持很多通用的操作,如:

用remove函数删除集合中的元素时,如果元素不存在,那么删除操作会得到系统的报错提示,大家可以自己试一试看。

此外,集合类型同样也支持pop操作和update操作。例如:

在使用 pop 函数时要注意,由于集合中元素的存储是无序的,所以pop的返回值也不保证顺序。两个包含相同元素的集合在pop元素的时候,顺序也可能不一致。

以上的这些操作和列表、字典对应的操作类似,大家应该会觉得比较好理解。如果大家还记得数学中的集合概念的话,Python中的集合数据类型也是支持各种数学中集合操作的。我们一起来看一下下面的例子:

这里,减号的意思是求两个集合的差集,即,前一个集合中去掉后一个集合中包含的元素的结果。这个例子里,x和y集合重叠的元素是:c,d。所以x - y,得出的值是a,b,而y-x得出的值则是f,e。

然后是求交集,两个集合的重叠部分:

可以看到,集合x和y的交集是c, d。自然的,还可以求并集,也就是合并两个集合中的所有元素:

可以看到,x和y两个集合的并集是a,b,c,d,e,f六个元素的集合。这里要再提醒大家一句,集合中的元素是没有顺序的概念的

此外,还有两个集合中的常见概念不得不提一下,它们就是子集超集。这两个概念,大家应该都比较熟悉。我们说集合x是集合y的子集,就是说,x中的元素在y中都有;在这种情况下,y又被称为x的超集。Python中的集合类型中有专门的函数来判断子集和超集的关系。我们来演示一下:

当然,每个集合都是自己的超集和自己的子集,大家可以用上面的函数来验证一下哦。

好了,有了集合类型这个利器,我们能做些什么呢?事实上,我们在生活中,经常有需要用到集合操作的场景。举个例子:假设你是一名中学的校长,你想查看你的学校中,期末考试英语成绩在90以上,参加了学校足球队,并且住校的男生。你应该怎么用程序的方式来解决这个需求呢?

一种方式是通过循环的方式,对于每个学生都查看一下这四项属性:期末考试英语成绩,是否是学校足球队成员,是否住校,性别。选出符合条件的同学。

另一种实现方式则是把满足这四个条件的学生信息分别做成四个集合,集合中放的是学生的学号,然后只需要对四个集合做求交集的操作就可以了。

下面我们用一个简单的例子来演示一下:

我们可以看到,只要准备好了集合数据,一步交集运算就能出结果。是不是很方便呢?

另外集合也支持推导式,使用方式和列表、字典类似。例如:

关于这些操作,大家还可以在课后自行练习实践一下。

好了,这节课就到这里。到目前为止,Python语言中内置的集合性质的数据类型,可乐就为大家全部介绍完了。最后,我们用一张表格来总结一下不同数据类型的特性:

列表有序,不唯一,可更新,只有值

元组有序,不唯一,不可更新,只有值

字典无序,唯一,可更新,有关键词和值

集合无序,唯一,可更新,只有关键词

大家可以从这个表格里看到每一种数据类型的特性。每个数据类型都功能强大,只要针对你的使用场景选择合适的数据类型,你就可以事半功倍,写出漂亮的代码了。

下节课里,我们将会再次聊一聊函数相关的话题。最后,欢迎大家关注我们的公众号“可乐编程”,如果你觉得可乐的课程内容有趣,请转发给你的朋友们哦,可乐感谢大家的支持,我们下次课再见!

往期课程:

《0基础学Python之十六:字典(下)》

《0基础学Python之十五:字典(上)》

《0基础学Python之十四:元组》

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180427G1RG5I00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券