1.数学上,把set称作由不同元素组成的集合,集合对象时一组无序排列的可哈希值,集合成员是可以做字典的键。
2.集合支持用in 和not in 操作符来检查成员,由len()得到集合的基数,用for循环迭代集合的成员,单数用于集合本身是无序的,你不可以为集合创建索引或者执行切片操作,有没有键来获取集合中的值。集合中不会出现相同的两个元素
3.集合中有2中不同的类型:可变集合set()和不可变集合frozenset(),可变集合不是可以hash的,因此不能够作为字典的键
4.更新可变集合的方法
>>> s=set("h") #集合初始化
>>> s
set(['h'])
>>> s.add('j') #向集合中添加新的元素
>>> s
set(['h', 'j'])
>>> s1=set("chinese")
>>> s1
set(['c', 'e', 'i', 'h', 'n', 's'])
>>> s.update(s1)#合并两个集合,元素相同的覆盖,没有的加上
>>> s
set(['c', 'e', 'i', 'h', 'j', 'n', 's'])
>>> s.clear() #删除集合中所有元素
>>> s
set([])
>>>
>>> del s #删除整个集合
>>> s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 's' is not defined
>>>
5.集合类型的操作符
①、联合(|):两个集合合并
>>> s=set("chinese")
>>> t=set("china")
>>> s|t #或者s.union(t)
set(['a', 'c', 'e', 'i', 'h', 'n', 's'])
>>>
②、交集(&):取两个集合相同部分组成一个新的集合
>>> s=set("chinese")
>>> t=set("china")
>>> s&t #或者s.intersection(t)
set(['i', 'h', 'c', 'n'])
>>>
③、差补(-):取只属于s不属于t的集合
>>> s=set("chinese")
>>> t=set("china")
>>> s-t #s.difference(t)
set(['s', 'e'])
④、对称差分(^):该集合中的元素,只能属于s或者集合t成员 ,不能同时属于这两个集合
>>> s=set("chinese")
>>> t=set("china")
>>> s^t #s.symmetric_diffference(t)
set(['a', 'e', 's'])
>>>
⑤、其他
>>> s
set(['c', 'e', 'i', 'h', 'n', 's'])
>>> s1
set(['i', 'h', 'c', 'a', 'n'])
>>> s.difference_update(s1) #删除s中在是集合s1中出现的元素
>>> s
set(['e', 's'])
>>>
>>> s=set("chinese")
>>> s1=set("china")
>>> s.symmetric_difference(s1) #返回两个集合不同时包含的元素组成的集合
set(['a', 'e', 's'])
>>>
>>> s
set(['c', 'e', 'i', 'h', 'n', 's'])
>>> s1
set(['i', 'h', 'c', 'a', 'n'])
>>> s.symmetric_difference_update(s1) #两个集合不同时包含的元素组成的集合赋值给s
>>> s
set(['a', 'e', 's'])
>>>
注意:左右两个操作数的类型相同,所产生的结果类型是相同的,如果不同,则产生的结果的类型与左边操作数的类型相同(在这里所说的类型是指是不变集合frozenset和可变集合set)
6.集合的其他常用方法
>>> s
set(['c', 'e', 'i', 'h', 'n', 's'])
>>> t
set(['i', 'h', 'c', 'a', 'n'])
>>> s.issubset(t) #如果t是s的子集就返回True
False
>>> s.issuperset(t) #如果t是s的超集就返回True
False
>>>
>>> s
set(['c', 'e', 'i', 'h', 'n', 's'])
>>> s.remove('c') #删除集合中对应的元素,没有就报错
>>> s
set(['e', 'i', 'h', 'n', 's'])
>>> s.remove('k')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'k'
>>>
>>> s
set(['e', 'i', 'h', 'n', 's'])
>>> s.discard('e') #删除集合中对应的元素,没有不做任何操作
>>> s
set(['i', 'h', 'n', 's'])
>>> s.discard('k')
>>>
>>> s
set(['i', 'h', 'n', 's'])
>>> s.pop('i') #按照序列的调用方法是不可行的
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given)
>>> s.pop() #删除并返回集合中第一个元素
'i'
>>> s.pop()
'h'
>>>
>>> s
set(['c', 'e', 'i', 'h', 'n', 's'])
>>>
>>> s.clear() #清空集合中所有的值
>>> s
set([])
>>>