总结
1.什么是集合
-
集合是可变的,无序列的,不可重复的元素的集合;
-
集合的元素必须是可以hash类型,也就是必须是hashable;
-
不可以hash类型:list, bytearray, set等;
-
可以hash类型:数值类型,布尔类型,字符串类型,bytes,元组,None等;
2.集合的定义
-
定义一个集合的语法是:
s = set()
,而直接s = {}
是定义一个空字典的语法; -
集合的初始化可以直接在中括号
{}
中赋值,类似与:s = {1,2,3};
3.集合的插入
-
集合的插入方法是add()方法;
-
集合中的元素是不可重复的,有去重功能;
4.集合的修改
- 集合的的修改方法是update()方法,可以修改集合中的元素;
5.集合的查询
- 集合是无序的,不能使用index索引查询,所以只能用迭代来查询;
6.集合的删除
-
remove:remove(value)方法直接移除元素的某个值;
-
discard: discard方法与remove方法类似,如不同之处在于如果元素不存在,remove方法会报错,而discard不会;
-
pop:一般来说集合中pop()方法是随机删除元素的,如果集合为空则报异常;
-
clear:清除集合中所有元素;
7.集合的对象操作
-
并集:两个集合求并集可以使用union()方法,或者使用 | 符号连接两个集合(多个元素则可以使用update()方法);
-
交集:两个集合求交集可以使用intersection()方法(多个集合可以使用intersection_update()方法);
-
差集:两个集合求差集可以使用difference方法,例如s1.difference(s2)表示s1有但s2没有的元素,反之亦然(多个集合用difference_update()方法)
8.集合查询效率问题
- 集合示非线性结构,查找时并不会随着元素集的增大而时间变长;
课后问题:
例1:
s = {[1,2,3],(1,2,3),100}
print(s) #输出:报错
例2:
s = {(1,2),100}
s.update([1,2,3],[4,5])
print(s) #输出: {(1, 2), 1, 2, 3, 100, 4, 5}
为什么例1和例2都是用了不可hash元素’列表’,例1会报错,而例2不会呢?
-
使用
{}
定义的集合,是集合的最终形式,python不会做任何处理,而集合不可以由非hash的元素组成(如上面的列表); -
使用
update()
方法更新,其相当于python会使用set()
来设置集合的并集,也就是set()
方法是可以传入列表的,python程序会把这个列表自动转换为集合,所以,你会发现通过set([1,2,3])
,输出的时候就会变成了{1,2,3}
这样的,就是把列表合并成了一个集合; -
另外一个情况是:使用
update()
和set()
方法,都是需要传入一个可迭代的对象,比如列表,如果传入一个单纯的数字,数字不可迭代,那么就会报错的哦,如update(1),set(1)
都会报错哦; -
总结一句话理解就是
{}
形式就是集合最终样子,而使用set()
和update()
这样的方法,python会转换合适的可迭代的数据生成一个集合,最终也会变为{}
形式。这相当于有一个中间处理状态,而{}
直接就是结果了,过程只要符合过程规范,而结果必须要符合结果的规范。
这节课主要讲解了Python中的集合数据类型,集合的定义,集合的增删改查方法等,内容比较多,同学们一定要多动手哟~
课后补充:
为什么下面输出结果第一个元素是1而不是2呢?
答:集合会自动按大小顺序排列,所以1在前面,并且集合会自动去重,所以输出的集合中只有一个2;