集合也是python中的一种基本数据类型,特点是其中的元素都是不重复的,而且是无序的。集合分为两种:可变集合set和不可变集合frozenset。
可变集合set:创建非空的集合时,参数必是迭代器类型,比如:序列/字典等,然后转换成无序不重复的集合,所以可以用来去重。
不可变集合frozenset:是不能被改变的,也就是不能插入和删除,类似于元组
>>> a=set()
>>> type(a)
>>> a
set()
>>> a=set([])#参数为空列表,元组/字符串/字典同理
>>> type(a)
>>> a
set()
>>> a=set([])
>>> a.add("a")
>>> a.add("b")
>>> a.add("c")
>>> a
{'a', 'b', 'c'}
>>> a.add("d")
>>> a
{'a', 'b', 'd', 'c'}
>>> a.add("d")#添加两个相同的值集合的元素不会改变
>>> a
{'a', 'b', 'd', 'c'}
>>> a.add('abc')#作为整体添加
>>> a
{'a', 'abc', 'c', 'b', 'd'}
>>>
>>> a
{'a', 'abc', 'c', 'b', 'd'}
>>> a.update('cde')
>>> a
{'a', 'abc', 'c', 'b', 'd', 'e'}
>>> a
{'a', 'b', 'd', 'c'}
>>> a[0]
Traceback (most recent call last):
File "", line 1, in
TypeError: 'set' object does not support indexing
>>> a[:3]
Traceback (most recent call last):
File "", line 1, in
TypeError: 'set' object is not subscriptable
>>>
>>> a
{'a', 'abc', 'c', 'b', 'd', 'e'}
>>> for i in a:print(i)
...
a
abc
c
b
d
e
带索引的遍历:
>>> for index,i in enumerate(a):print(index,i)
...
0 a
1 abc
2 c
3 b
4 d
5 e
>>>
>>> a
{'a', 'abc', 'c', 'b', 'd', 'e'}
>>> a.remove('d')
>>> a
{'a', 'abc', 'c', 'b', 'e'}
>>>
>>> a=set([1,2,3,2]) #列表转换为集合
>>> a
{1, 2, 3}
>>> a=set("abc") #字符串转换为集合
>>> a
{'a', 'b', 'c'}
>>> a=set((1,2,3)) #元组转换为集合
>>> a
{1, 2, 3}
>>> a=set({1:'1',2:'2'}) #字典转换为集合,默认用字典的key
>>> a
{1, 2}
>>> a=set({1:'1',2:'2'}.values()) #字典的value转换为集合
>>> a
{'2', '1'}
>>> a=set({1:'1',2:'2'}.items()) #字典的键值对元组转换为集合
>>> a
{(2, '2'), (1, '1')}
>>> a=set("abcd")
>>> list(a) #集合转换为列表
['a', 'b', 'd', 'c']
>>> tuple(a) #集合转换为元组
('a', 'b', 'd', 'c')
>>> str(a)
"{'a', 'b', 'd', 'c'}"
>>> ''.join(a) #集合转换为字符串,不能用str()
'abdc'
>>>
作用:在集合中查找元素element,如果找到就将其删除;如果没找到则什么也不做。该函数没有返回值
>>> a=set([1,2,3,4,5])
>>> a.discard(3) #元素直接删除
>>> a
{1, 2, 4, 5}
>>> a.discard(6) #元素不存在也不会报错
>>> a
{1, 2, 4, 5}
>>>
删除的是集合中的第一个元素,如果集合中没有元素就会引发KeyError异常
>>> a=set([1,2,3,4,5])
>>> a.pop() #删除并返回第一个元素
1
>>> a
{2, 3, 4, 5}
>>> a.pop()
2
>>> a.pop()
3
>>> a.pop()
4
>>> a.pop()
5
>>> a.pop()
Traceback (most recent call last):
File "", line 1, in
KeyError: 'pop from an empty set'
>>>
clear():清空集合中所有的元素
>>> a=set([1,2,3,4,5])
>>> a.clear()
>>> a
set()
>>> a=set([1,2,3,4,5])
>>> len(a)
5
>>> a.clear()
>>> len(a)
0
>>> a=set([1,2,3,4,5])
>>> b=a.copy()
>>> id(a)
2974189682248
>>> id(b)
2974189681128
>>> a=set("abcd")
>>> b=set("cdef")
>>> a&b
{'d', 'c'}
>>> a=set("abcd")
>>> b=set("cdef")
>>> a|b
{'a', 'd', 'c', 'b', 'e', 'f'}
>>> a=set("abcd")
>>> b=set("cdef")
>>> a-b
{'a', 'b'}
>>> b-a
{'e', 'f'}
>>> a=set("abcd")
>>> b=set("cdef")
>>> a.difference(b)
{'a', 'b'}
>>> b.difference(a)
{'f', 'e'}
>>> a-b
{'a', 'b'}
>>> b-a
{'f', 'e'}
>>> a=set("abcd")
>>> b=set("cdef")
>>> a^b
{'a', 'b', 'e', 'f'}
s1.issuperset(s2):s1是否是s2的超集,是的话返回True,否则返回False
s1.issubset(s2):s1是否是s2的子集,是的话返回True,否则返回False
>>> a=set("abcd")
>>> b=set('ab')
>>> a.issuperset(b)
True
>>> a.issubset(b)
False
>>> b.issubset(a)
True
>>> a=set("abcd")
>>> b=set('ab')
>>> a>b
True
>>> a>> a=b
>>> a=set("abcd")
>>> b=set('e')
>>> a>b
False
>>> a==b
False
>>> a>>
>>> a=frozenset([1,2,3])
>>> list(a)
[1, 2, 3]