集合(set)是0个或多个对想引用的无序集合,这些对象所引用都是哈希运算的
集合是可变的。其中的项是无序的,因此,没有索引位置概念
集合中,任何元素都没有重复
set和dict类似,是一组key的集合,但不存储value,且在set中没有重复的key
4.1集合常用操作
1.创建集合
可以调用集合的构造函数来创建一个集合。必须使用set构造函数。set构造函数至多有一个参数。
没有参数,set会创建空集
>>>nullSet=set()
>>>nullSet
set()
提供一个str作为输入集合,创建一个set
>>>a_set=set('abcd')
>>>a_set
{'a','c','b','d'}
提供一个list作为输入集合,创建一个set
>>>s=set([1,2,3])
>>>s不会报错。
{1,2,3}
重复元素在set中将会自动过滤
2.添加元素
通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果
>>>s.add(4)
>>>s
{1,2,3,4}
>>>s.add(4)
>>>s
3.删除元素
通过remove(key)可以删除元素
>>>s.remove(4)
>>>s
{1,2,3}
discard(key)也可以删除元素,不同的是,如果删除的元素不在集合中,remove会报错,discard不会报错
>>>s.remove(7)
报错
但是discard不会报错
clear()删除集合的所有元素(使它成为空集)
4.典型的集合运算符
len():和所有集合类型一样,len函数可以确定集合中元素数量
in:判断某元素是否在集合中,in运算符根据是否中返回布尔值True或False
for:和所有集合类型一样,for语句能能够遍历集合中的元素
5.典型的数学集合运算
1.交集
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义的交集、并集等操作
intersection方法创建新集合,该集合为两个集合的公共部分。进行交集运算时集合的顺序不重要。“&”也表示取交集。
>>>s1=set([1,2,3])
>>>s2=set([2,3,4])
>>>s1.imtersection(s2)
{2,3}
>>>s1&s2
{2,3}
2并集
union方法创建新集合,该集合包含两个集合中所有的元素
并集运算中两个集合的顺序也不重要
"|"也表示取并集
>>>s1.union(s2)
>>>s1|s2
3.差集
difference方法收集在调用集合但不在参数集合中的元素
不同于其他运算,差集运算时不可交换的
4.对称差
对称差运算中集合的顺序不重要
它收集两个结合那些不共享的元素
>>>s1.symmentric_difference(s2)
5.子集和超集
如果集合A的每一个元素都是集合B中的元素,称集合A是集合B的子集。超集是相反的意思,仅当集合B是集合A的一个子集,集合A才是集合B的一个超集
在上述运算中,集合运算的顺序是很重要的,即运算时不可交换的
代码如下:
>>>sSet=set([1,2,3])
>>>bSet=set([1,2,3,4,5,6])
>>>sSet.issubset(bSet)
True
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入对象,因为无法判断两个可变对象是否相等,也无法保证内部不会有重复元素
4.2集合的常用函数
s.copy(),返回一个新集合,它是集合s的浅拷贝
s.update(t),用t中的元素修改s,即s现在包含s或t的成员
s.intersection_update(t),s中的成员是共同属于s和t的元素
s.symmetric_difference_update(t)s中的成员更新为那些包含在s或t中,但不是s和t共有的元素