![零基础入门学习Python(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/693/27111693/b_27111693.jpg)
上QQ阅读APP看书,第一时间看更新
7.2 集合:在我的世界里,你就是唯一
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P115_19019.jpg?sign=1739154452-dOC3UcD8CO3YYZ7XuEJbAQ46jPUoqAqr-0-1c26f1cc0c131bc39018de1af69446b2)
视频讲解
Python的字典是对数学中映射概念支持的直接体现,然而今天我们请来了字典的“表亲”:集合。
难道它们长得很像?来,大家看下代码:
>>> num1 = {} >>> type(num1) <class 'dict'> >>> num2 = {1, 2, 3, 4, 5} >>> type(num2) <class 'set'>
在Python 3里,如果用大括号括起一堆数字但没有体现出映射关系,那么Python就会认为这堆数据是一个集合而不是映射。
集合在Python中的最大特点就是两个字:唯一。
举个例子:
>>> num = {1, 2, 3, 4 ,5, 4, 3, 2, 1} >>> num {1, 2, 3, 4, 5}
大家看到,根本不需要额外做些什么,集合就会自动地将重复的数据删除,这样是不是很方便呢?但要注意的是,集合是无序的,也就是不能试图去索引集合中的某一个元素:
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P116_69912.jpg?sign=1739154452-Jxhdli5UROXJo2yWdOIiQkTa36Nl9YBx-0-19545c785e886b9115289e7237051d26)
7.2.1 创建集合
创建集合有两种方法:一种是直接把一堆元素用大括号({})括起来;另一种是用set()内置函数。
>>> set1 = {"小甲鱼", "小鱿鱼", "小鲤鱼", "小甲鱼"} >>> set2 = set(["小甲鱼", "小鱿鱼", "小鲤鱼", "小甲鱼"]) >>> set1 == set2 True
现在要求去除列表[1, 2, 3, 4, 5, 5, 3, 1, 0]中重复的元素,如果还没有学习过集合,可能代码要这么写:
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P117_69914.jpg?sign=1739154452-jww4YudPd1tZkyV7DCqpjObLhI1HTACB-0-b2fdfab9442954eb8e3a32519ef2ae18)
学习了集合之后,就可以这么写:
>>> list1 = [1, 2, 3, 4, 5, 5, 3, 1, 0] >>> list1 = list(set(list1)) >>> list1 [0, 1, 2, 3, 4, 5]
看,知识才是第一生产力!不过大家发现没有,由于set()创造的集合内部是无序的,所以再调用list()将无序的集合转换成列表就不能保证原来的列表顺序了(这里Python好心办坏事儿,把0放到最前面了),所以如果关注列表中元素的排序问题,那么在使用set()函数时就要提高警惕。
7.2.2 访问集合
由于集合中的元素是无序的,所以并不能像序列那样用下标来进行访问,但是可以使用迭代把集合中的数据一个个读取出来:
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P117_19232.jpg?sign=1739154452-W397z57zt7ermMHobSMWl4dRUo7pOzxV-0-ceeb0f6cd243a3a858b81453beca84c4)
当然也可以使用in和not in判断一个元素是否在集合中已经存在:
>>> 0 in set1 True >>> 'oo' in set1 False >>> 'xx' not in set1 True
使用add()方法可以为集合添加元素,使用remove()方法可以删除集合中已知的元素:
>>> set1.add(6) >>> set1 {0, 1, 2, 3, 4, 5, 6} >>> set1.remove(5) >>> set1 {0, 1, 2, 3, 4, 6}
7.2.3 不可变集合
有时候希望集合中的数据具有稳定性,也就是说,像元组一样,不能随意地增加或删除集合中的元素。那么可以定义成不可变集合,这里使用的是frozenset()函数,就是把元素给frozen(冰冻)起来:
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P118_69919.jpg?sign=1739154452-5xVAe1pk0gelP6rAjp8w1PwWqYl3u6iw-0-f1f156578216d447fe6eed82a6100b5a)