集合是只有键的字典,元素不能重复。集合也用大括号({})表示。集合中的元素是没有先后次序的,不能索引。可以向集合中添加元素,或从集合中删除元素,但不能修改元素的值。对于多个集合,可以计算它们的交集、并集和差集等。[大谦MATLAB,dqmatlab点com]
集合的创建
可以使用大括号({})直接创建集合,元素可以有不同的数据类型。下面创建一个集合:
>>> st={1, 'a'}
>>> st
{1, 'a'}
注意:集合中的元素可以无序,但是必须唯一,也就是不能重复。
也可以使用set函数创建集合,或者把其他可迭代对象转换为集合。其他可迭代对象包括字符串、区间、列表、元组、字典等。
>>> set({1,'ax27;}) #直接创建
{1, 'a'}
>>> set('abcd') #转换字符串
{'b', 'c', 'd', 'a'}
>>> set(range(5)) #转换区间
{0, 1, 2, 3, 4}
>>> set([1,'ax27;]) #转换列表
{1, 'a'}
>>> set((1,'ax27;)) #转换元组
{1, 'a'}
>>> set({1:'a',2:'b'}) #转换字典
{1, 2}
如果可迭代对象中存在重复数据,则最后生成的集合中只保留一个。利用集合的这个特点,可以对给定数据进行去除重复数据的操作。
>>> st=set([1,'a'',1,'a'])
>>> st
{1, 'a'}
集合中元素的个数称为集合的长度。使用len函数计算集合的长度。
>>> st={1,2}
>>> len(st)
2
或者直接
>>> len({1,2})
2
集合元素的添加和删除
使用集合对象的add方法往集合中添加元素。下面创建集合st并往集合中添加元素4:
>>> st={1,'a'}
>>> st.add(4)
>>> st
{1, 4, 'a'}
使用集合对象的remove方法从指定集合中删除元素。下面从集合st中删除元素4:
>>> st. remove(4)
>>> st
{1, 'a'}
使用集合对象的clear方法将集合中的所有元素清空。
>>> st. clear()
>>> st
set()
集合的运算
集合的运算包括集合的交运算、并运算、差运算、对称交集运算等。
一、交集和并集运算
对于图13-1中所示的两个圆形区域A和B,把它们看作是两个集合,它们的交集是中间深颜色的重叠部分,即C区,它们的并集是所有阴影区域。
图13-1 集合的交运算和并运算
Python中,可用&运算符或集合对象的intersection方法求两个给定集合的交集。
>>> {1,2,3} & {1,2,5}
{1, 2}
>>> {1,2,3}.intersection({1,2,5})
{1, 2}
可见,两个给定集合的交集即这两个集合共有的元素组成的新集合。
用|运算符或集合对象的union方法求两个给定集合的并集。
>>> {1,2,3} | {1,2,5}
{1, 2, 3, 5}
>>> {1,2,3}.union({1,2,5})
{1, 2, 3, 5}
可见,两个给定集合的并集即这两个集合的所有元素放在一起并去掉重复元素后得到的新集合。
二、差集运算
如图13-2所示,用圆形区域A和B表示两个集合,则它们之间的差集A-B就是A减去A和B的交集,对应于图中A区域的深色部分。
图13-2 集合的差运算
用减号(-)或集合对象的difference方法求两个给定集合的差集。
>>> {1,2,3} - {1,2,5}
{3}
>>> {1,2,3}.difference({1,2,5})
{3}
>>> {1,2,5} - {1,2,3}
{5}
>>> {1,2,5}.difference({1,2,3})
{5}
可见,两个给定集合的差集即它们各自减去二者的并集后得到的新集合。
三、对称差集运算
如图13-3所示,用圆形区域A和B表示两个集合,则它们的对称差集为它们的并集减去它们的交集得到的新集合,对应于图中的阴影部分。
图13-3 集合的对称差集运算
使用^运算符或集合对象的symmetric_difference方法计算给定集合的对称差集。
>>> {1,2,3} ^ {1,2,5}
{3, 5}
>>> {1,2,3}.symmetric_difference({1,2,5})
{3, 5}
集合{1,2,3}和{1,2,5}的并集为{1,2,3,5},交集为{1,2},对称差集等于给定集合的并集减去交集,所以为{3,5}。
四、子集、真子集、超集和真超集
如图13-4所示,用圆形区域A和B表示给定的两个集合,如果A与B重叠或者A被B包含,则称A表示的集合是B表示的集合的子集,B表示的集合是A表示的集合的超集。如果排除大小相同并重叠的情况,即A完全被B包含,则称A表示的集合是B表示的集合的真子集,B表示的集合是A表示的集合的真超集。
图13-4 子集和超集
用<=运算符或集合对象的issubset方法进行子集运算。对于集合A和集合B,如果A<=B,或A.issubset(B)的返回值为True,则集合A是集合B的子集。
>>> {1,2,3} <= {1,2,5}
False
>>> {1,2,3} <= {1,2,3}
True
>>> {1,2,5}.issubset({1,2,5})
True
>>> {1,2}.issubset({1,2,5})
True
对于集合A和集合B,如果A<B,则集合A是集合B的真子集。
>>> {1,2} < {1,2,5}
True
对于集合A和集合B,如果A>=B,或A.issuperset(B)的返回值为True,则集合A是集合B的超集。
>>> {1,2,5} >= {1,2,5}
True
>>> {1,2,5} > {1,2}
True
>>> {1,2,5}.issuperset({1,2,5})
True
>>> {1,2,5}.issuperset({1,2})
True
对于集合A和集合B,如果A>B,则集合A是集合B的真超集。
>>> {1,2,5} > {1,2}
True