python3基础:集合

集合也是python中的一种基本数据类型,特点是其中的元素都是不重复的,而且是无序的。集合分为两种:可变集合set和不可变集合frozenset。
可变集合set:创建非空的集合时,参数必是迭代器类型,比如:序列/字典等,然后转换成无序不重复的集合,所以可以用来去重。
不可变集合frozenset:是不能被改变的,也就是不能插入和删除,类似于元组

创建空集合

>>> a=set()
>>> type(a)

>>> a
set()

>>> a=set([])#参数为空列表,元组/字符串/字典同理
>>> type(a)

>>> a
set()

添加元素add():将要添加的元素作为一个整体添加

>>> 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'}
>>>

添加元素update():将要传入的元素拆分成单个字符

>>> 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
>>>

remove():删除集合中的一个元素

>>> 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'
>>>

discard(element):查找并删除指定元素

作用:在集合中查找元素element,如果找到就将其删除;如果没找到则什么也不做。该函数没有返回值

>>> a=set([1,2,3,4,5])
>>> a.discard(3)  #元素直接删除
>>> a
{1, 2, 4, 5}
>>> a.discard(6)  #元素不存在也不会报错
>>> a
{1, 2, 4, 5}
>>>

pop():删除集合中的第一个元素

删除的是集合中的第一个元素,如果集合中没有元素就会引发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()

len():获取集合中元素的个数

>>> a=set([1,2,3,4,5])
>>> len(a)
5
>>> a.clear()
>>> len(a)
0

copy():集合拷贝,得到一个新的集合

>>> 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'}

差集-:在集合1不在集合2的元素集合

>>> a=set("abcd")
>>> b=set("cdef")
>>> a-b
{'a', 'b'}
>>> b-a
{'e', 'f'}

s1.difference(s2):两个集合的不同之处,等价于差集

>>> 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'}

issuperset()/issubset():超集和子集

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>>

不可变集合frozenset,不能删除和增加元素

>>> a=frozenset([1,2,3])
>>> list(a)
[1, 2, 3]

你可能感兴趣的:(python)