定义
由不重复且不可变对象组成的无序且有限的集合。因此它们不能通过下标来索引。但是它们可被迭代,也可用内置函数 len() 返回集合中的条目数。集合常见的用处是快速成员检测,去除序列中的重复项,以及进行交、并、差和对称差等数学运算。
对于集合元素所采用的不可变规则与字典的键相同。注意数字类型遵循正常的数字比较规则: 如果两个数字相等 (例如 1 和 1.0),则同一集合中只能包含其中一个。
总结几点特征:
- 集合是无序的
- 集合是可变的
- 集合内元素是确定的(不可变的)
- 集合内元素是唯一的(不重复的)
基本操作
创建集合
使用{},注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典
使用set()函数
根据定义,集合内元素是唯一的、不重复的,所以可以自动去重
集合间运算
添加元素
add(x)方法,添加元素。无返回值。如果元素已存在,则不进行任何操作,因为集合元素是不重复的
update(x)方法,可理解为是批量添加。无返回值。参数是单个元素或者集合,依然遵循元素不重复的原则
移除元素
remove(x)方法,移除x元素,返回被移除的x元素。有返回值。当要移除的元素x不存在时,会报错。
discard(x)方法,移除x元素,作用同remove方法,但无返回值。区别是当要移除元素x不存在时,不会报错。
清空集合
clear()方法,清空集合内所有元素。无返回值。
方法
copy()
拷贝集合并返回拷贝的集合。有返回值。
关于浅拷贝,参考上节字典的copy()方法中所提
difference(set)
返回集合的差集,有返回值。例如a.difference(b),返回的是去除相同元素的新集合
difference_update(set)
移除两个集合中都存在的元素,无返回值。例如a.difference_update(b),即在a中移除两个集合中都存在的元素,与difference不同的是,该方法直接修改a
intersection(set1,set2,....)
用于返回两个或更多集合中都包含的元素,即交集。有返回值。
intersection_update()
用于获取两个或更多集合中都重叠的元素,即计算交集。无返回值。
不同于 intersection() 方法,因为 intersection() 方法是返回一个新的集合,而 intersection_update() 方法是在原始的集合上移除不重叠的元素。
isdisjoint()
用于判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
如图,判断y中是否包含x的元素
issubset()
用于判断集合的所有元素是否都包含在指定集合中,如果是则返回 True,否则返回 False。
如图,判断y中是否包含x
issuperset()
用于判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False。
如图,判断x中是否包含y
和issubset()好像差不多,只是包含关系不一样
symmetric_difference()
返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。有返回值
symmetric_difference_update()
移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。无返回值。
union()
返回两个集合的并集,即包含了所有集合的元素,重复的元素只会出现一次。有返回值