目录:
一、字典的表亲:集合
二、创建集合
三、访问集合
四、不可变集合
五、课时27课后习题及答案
**************************
一、字典的表亲:集合
**************************
Python的字典是对数学中映射概念支持的直接体现。字典有个表亲:集合。哦?它们长得很像?
>>> num1 ={}>>>type(num1)
>>> num2 = {1,2,3,4,5}>>>type(num2)
在Python里,如果用大括号括起一堆数字但没有体现映射关系,那么Python就会认为这堆玩意就是个集合。
集合的作用:唯一。举个例子:
>>> num = {1,2,3,4,5,4,3,2,1}>>>num
{1, 2, 3, 4, 5}
大家看到,我们根本就不需要做什么,集合就会帮我们把重复的数据清理掉,这样是不是很方便呢?但要注意的是,集合是无序的,也就是你不能试图去索引集合中的某一个元素:
>>> num[2]
Traceback (most recent call last):
File"", line 1, in num[2]
TypeError:'set' object does not support indexing
***************
二、创建集合
***************
创建集合有两种方法:一种是直接把一堆元素用大括号{ }括起来;另一种是用set()。
>>> set1 = {"小甲鱼","小鱿鱼","小护士","小甲鱼"}>>> set2 = set(["小甲鱼","小鱿鱼","小护士","小甲鱼"])>>> set1 ==set2
True>>>set1
{'小鱿鱼', '小护士', '小甲鱼'}>>>set2
{'小鱿鱼', '小护士', '小甲鱼'}
现在要求去除列表[1,2,3,4,5,5,3,1,0]中重复的元素。没学过集合时,可以这样写:
>>> list1 = [1,2,3,4,5,5,3,1,0]>>> temp =list1[:]>>>list1.clear()>>> for each intemp:if each not inlist1:
list1.append(each)>>>list1
[1, 2, 3, 4, 5, 0]
学习了集合后,可以这样干:
>>> 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()这个函数时就要提高警惕啦!
***************
三、访问集合
***************
由于集合中的元素是无序的,所以并不能像序列那样用下标来进行访问,但是可以使用迭代把集合中的数据一个个读取出来:
>>> set1 = {1,2,3,4,5,4,3,2,1,0}>>> for each inset1:print(each,end= ' ')
01 2 3 4 5
当然也可以使用in或者not in判断一个元素是否在集合中已经存在:
>>> 0 inset1
True>>> "oo" inset1
False>>> "xx" not inset1
True
使用add()方法可以为集合添加元素,使用remove()方法可以删除集合中已知的元素:
>>>set1
{0,1, 2, 3, 4, 5}>>> set1.add(6)>>>set1
{0,1, 2, 3, 4, 5, 6}>>> set1.remove(5)>>>set1
{0,1, 2, 3, 4, 6}
******************
四、不可变集合
******************
有些时候,我们希望集合中的元素具有稳定性,也就是说,像元组一样不能随意的增加或者删除集合中的元素。那么我们可以定义不可变集合,这里使用的是frozenset()函数,没错,就是把元素frozen(冰冻)起来:
>>> set1 = frozenset({1,2,3,4,5})>>>set1
frozenset({1, 2, 3, 4, 5})>>> set1.add(6)
Traceback (most recent call last):
File"", line 1, in set1.add(6)
AttributeError:'frozenset' object has no attribute 'add'
*******************************
五、课时27课后习题及答案
*******************************