什么是集合?
集合是存储不重复元素的无序序列。
集合由字典衍生而来,但是集合只存储key,不存储value,且key不能重复。
集合会自动忽略重复的数据。
集合中只能存储不可变数据类型。
创建一个集合
我们可以用花括号{}/set()来创建集合,但是,如果创建空集合,只能用set(),不能用{},因为{}是用来创建空字典的。
>>> aset = set()
>>> aset
set()
>>> bset = {'a','b','c'}
>>> bset
{'b', 'c', 'a'}
可用set()从其他序列转换而来。
>>> cset = set([1,2,'abc'])
>>> cset
>>> dset = set(('Jane','Tim','Tony'))
>>> dset
{'Tim', 'Tony', 'Jane'}
集合的基本操作
集合中元素的个数
len()
>>> aset = {'Python','Java','C++'}
>>> len(aset)
3
(注:aset的元素个数是3个)
判断元素是否在集合中
in
>>> aset = {'Python','Java','C++'}
>>> 'Python' in aset
True
(注:'Python'在集合aset里面)
添加元素
add添加一个数据,必须是不可变数据类型
>>> aset = {'Python','Java','C++'}
>>> aset.add('PHP')
>>> aset
{'Java', 'C++', 'PHP', 'Python'}
update批量添加数据
>>> aset = {'Java', 'C++', 'PHP', 'Python'}
>>> aset.update(('C','Ruby'))
>>> aset
{'Java', 'Python', 'Ruby', 'C', 'PHP', 'C++'}
>>> aset.update(['VB','.NET'])
>>> aset
{'Java', 'Python', 'Ruby', '.NET', 'C', 'PHP', 'C++', 'VB'}
>>> aset.update({'C#','SQL'})
>>> aset
{'Java', 'Python', 'Ruby', '.NET', 'C', 'C#', 'PHP', 'SQL', 'C++', 'VB'}
(注:update可以添加列表,元组,甚至集合)
移除元素
remove当删除一个不存在的元素时,会报错。
>>> aset = {'Python','Java','PHP','C++'}
>>> aset.remove('PHP')
>>> aset
{'Java', 'C++', 'Python'}
>>> aset.remove('Ruby')
Traceback (most recent call last):
File "
", line 1, in
aset.remove('Ruby')
KeyError: 'Ruby'
discard当删除一个不存在的元素时,不会报错。
>>> aset = {'Python','Java','PHP','C++'}
>>> aset.discard('Java')
>>> aset
{'C++', 'PHP', 'Python'}
>>> aset.discard('C')
>>> aset
{'C++', 'PHP', 'Python'}
pop删除任意的数据,并返回该值。
>>> aset = {'Python','Java','PHP','C++'}
>>> aset.pop()
'Java'
>>> aset.pop()
'C++'
>>> aset
{'PHP', 'Python'}
清空集合
clear
>>> aset = {'Python','Java','PHP','C++'}
>>> aset.clear()
>>> aset
set()
集合的运算
并集 a | b
>>> aset = set('abc')
>>> aset
{'b', 'c', 'a'}
>>> bset = set('bcd')
>>> bset
{'b', 'c', 'd'}
>>> aset | bset
{'b', 'c', 'd', 'a'}
交集 a & b
>>> aset & bset
{'b', 'c'}
差集 a - b
>>> aset - bset
{'a'}
(注:把2个集合共有的元素从aset中删除)
对称差 a ^ b
>>> aset ^ bset
{'d', 'a'}
(注:并集减去交集,就是对称差)
真超集,>=超集
==两个集合是否相等,=!不等于
>>> aset
True
(注:aset是set('abcd')的子集)
>>> aset > set('abcd')
False
(注:aset不是set('abcd')的超集)
>>> aset == bset
False
>>> aset != bset
True
以上是集合的一些总结,欢迎大家指正。
领取专属 10元无门槛券
私享最新 技术干货