C语言和Python经常弄混,尤其总是忍不住给Python后面加分号……干脆给自己做个笔记省的忘了。。。(在慕课网学习的)
十二、集合
在前面,我们学习了dict,知道dict的key是不重复的,当我们往dict里添加一个相同key的value时,新的value将会覆盖旧的value。 有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。
1. 集合与列表
set和list类似,拥有一系列元素,但是set和list不一样,set里面的元素是不允许重复的,而list里面可以包含相同的元素;set与list的另一个区别是,set里面的元素是没有顺序的。
2. 创建集合
创建set的方式是使用set(),并传入一个list,list的元素将会被转换成set的元素。
>>> s = set([1, 4, 3, 2, 5])
>>> s
{1, 2, 3, 4, 5}
另外,set不能包含重复的元素:
>>> s = set([1, 4, 3, 2, 5, 4, 2, 3, 1])
>>> s
{1, 2, 3, 4, 5}
3. 集合的增删查
3.1 增
3.1.1 add()添加一个
>>> s = set(['Alice', 'Bob', 'Candy', 'David', 'Ellena'])
>>> s.add('Gina')
>>> s
{'Candy', 'Ellena', 'Bob', 'Alice', 'Gina', 'David'}
>>> s.add('Alice')
>>> s
{'Candy', 'Ellena', 'Bob', 'Alice', 'Gina', 'David'}
3.1.2 update()批量添加
>>> s = set(['Alice', 'Bob'])
>>> new_s = ['Hally', 'Isen', 'Jenny', 'Karl']
>>> s.update(new_s)
>>> s
{'Karl', 'Bob', 'Alice', 'Hally', 'Isen', 'Jenny'}
3.2 删
3.2.1 删除一个元素remove()
>>> s = set(['Jenny', 'Ellena', 'Alice', 'Candy'])
>>> s.remove('Alice')
>>> s
{'Jenny', 'Candy', 'Ellena'}
>>> s.remove('David')
Traceback (most recent call last):
File "<pyshell#356>", line 1, in <module>
s.remove('David')
KeyError: 'David'
3.2.2 不会报错的删除方法discard()
>>> s = set(['Jenny', 'Ellena', 'Alice', 'Candy'])
>>> s.discard('Alice')
>>> s
{'Jenny', 'Candy', 'Ellena'}
>>> s.discard('David')
>>> s
{'Jenny', 'Candy', 'Ellena'}
3.2.3 清除所有元素的方法clear()
>>> s = set(['Jenny', 'Ellena', 'Alice', 'Candy'])
>>> s.clear()
>>> s
set()
3.3 查
3.3.1 读取set元素
>>> s = set(['Jenny', 'Ellena', 'Alice', 'Candy'])
>>> 'Alice' in s
True
>>> 'Bob' in s
False
3.3.2 集合的子集和超集
set提供方法判断两个set之间的关系,比如两个集合set,判断其中一个set是否为另外一个set的子集或者超集。
>>> s1 = set([1,2,3])
>>> s2 = set([1,2,3,4,5])
>>> s1.issubset(s2)
True
>>> s2.issuperset(s1)
True
3.3.3 判断集合是否重合
有时候需要判断两个集合是否有重合的地方,如果使用传统的方法,需要使用for循环一个一个的去判断,非常麻烦,set提供isdisjoint()方法,可以快速判断两个集合是否有重合,如果有重合,返回False,否则返回True。
>>> s1 = set([1,2,3,7])
>>> s2 = set([1,2,3,4,5])
>>> s1.isdisjoint(s2)
False
|