python集合
集合(英文名 set),它是一个无序的不重复元素序列。
这里面有两个重点:
无序,
不重复
1. 创建集合
集合的创建有两种方法
第一种方法:使用 花括号 {}
直接创建,创建的时候,{}
可以包含有重要的元素,但是创建完后,集合会去重,只留第一个。
>>> aset = {\"Apple\", \"Huawei\", \"Xiaomi\"}>>> asetset([\'Huawei\', \'Xiaomi\', \'Apple\'])
第二种方法:使用 set()
方法进行创建,当set()
函数不接任何参数时,创建的是空集合,如果不创建空集合,可以传入一个列表。
>>> bset = set() # 空集合>>> bsetset([])>>> cset = set([\"Apple\", \"Huawei\", \"Xiaomi\"])>>> csetset([\'Huawei\', \'Apple\', \'Xiaomi\'])
2. 增删改查增加元素
使用 add
函数可以往集合中传入函数
>>> aset = set()>>> asetset([])>>> aset.add(\"Apple\")>>> aset.add(\"Huawei\")>>> asetset([\'Huawei\', \'Apple\'])
另外,还可以使用 update
函数,来往集合中添加元素,update
函数后可接集合,列表,元组,字典等。
这是接集合的例子
>>> aset = set()>>> asetset([])>>>>>> # 接集合>>> aset.update({\"Apple\"})>>> asetset([\'Apple\'])>>>>>> # 接列表>>> aset.update([\"Huawei\"])>>> asetset([\'Huawei\', \'Apple\'])>>>>>> # 接元组>>> aset.update((\"Xiaomi\",))>>> asetset([\'Huawei\', \'Apple\', \'Xiaomi\'])>>>>>> # 接字典>>> aset.update({\"VIVO\": \"xxxx\"})>>> asetset([\'Huawei\', \'Apple\', \'VIVO\', \'Xiaomi\'])
删除元素
使用 remove
函数可以删除集合中的元素
>>> aset = {\"Apple\", \"Huawei\", \"Xiaomi\"}>>> aset.remove(\"Xiaomi\")>>> asetset([\'Huawei\', \'Apple\'])
使用 remove
函数,如果对应的元素不存在,是会报错的。
>>> aset = {\"Apple\", \"Huawei\", \"Xiaomi\"}>>> aset.remove(\"VIVO\")Traceback (most recent call last): File \"\", line 1, in KeyError: \'VIVO\'
对于这种情况,你可以使用 discard
函数,存在元素则移除,不存在也不会报错。
>>> aset = {\"Apple\", \"Huawei\", \"Xiaomi\"}>>> aset.discard(\"VIVO\")>>> asetset([\'Huawei\', \'Xiaomi\', \'Apple\'])
此外,还有一个 pop
函数,用于从集合中随机删除元素,和列表、字典的 pop
不一样,这里的 pop 不能加任何的参数。
>>> aset = {\"Apple\", \"Huawei\", \"Xiaomi\"}>>> aset.pop()\'Huawei\'>>> aset.pop()\'Xiaomi\'>>> aset.pop()\'Apple\'
最后,还要介绍一个 clear
函数,它用于清空集合的元素。
>>> aset = {\"Apple\", \"Huawei\", \"Xiaomi\"}>>> asetset([\'Huawei\', \'Xiaomi\', \'Apple\'])>>> aset.clear()>>> asetset([])
修改元素
文章开头处,已经说明了集合是 无序
的,因此集合是没有索引的。
既然没有索引,修改也无从谈起。
记住:集合只有添加元素、删除元素。
查询元素
同上,没有顺序,也就没有索引,没有索引,查询也无从谈起。
但是我们可以查看集合的其他内容
比如,查看集合的长度
>>> aset = {\"Apple\", \"Huawei\", \"Xiaomi\"}>>> len(aset)3
3. 集合运算求合集
将两个集合进行合并并去重,可以使用 union
函数,下面的示例中,由于 Huawei
是重复的元素,只会保留一个。
>>> aset = {\"Apple\", \"Huawei\"}>>> bset = {\"Xiaomi\", \"Huawei\"}>>> aset.union(bset)set([\'Huawei\', \'Apple\', \'Xiaomi\'])
另外还可以使用 |
的操作符
>>> aset = {\"Apple\", \"Huawei\"}>>> bset = {\"Xiaomi\", \"Huawei\"}>>> aset | bsetset([\'Huawei\', \'Apple\', \'Xiaomi\'])
求差集
要找出存在集合 A 但是不存在 集合 B 的元素,就是对两个集合求差集。
可以使用 difference
函数,下面的示例中, Apple
在 aset 中存在,但在 bset 中不存在。
>>> aset = {\"Apple\", \"Huawei\"}>>> bset = {\"Xiaomi\", \"Huawei\"}>>> aset.difference(bset)set([\'Apple\'])
另外还可以使用 -
的操作符,更加直观
>>> aset = {\"Apple\", \"Huawei\"}>>> bset = {\"Xiaomi\", \"Huawei\"}>>> aset - bsetset([\'Apple\'])
求交集
要找出存在集合 A 并且存在集合 B 的元素,就是对两个集合求交集。
可以使用 intersection
函数
>>> aset = {\"Apple\", \"Huawei\"}>>> bset = {\"Xiaomi\", \"Huawei\"}>>> aset.intersection(bset)set([\'Huawei\'])>>>
和 intersection
相似的还有一个 intersection_update
函数,它们的区别是,intersection_update
会原地更新在 aset 上,而不是会回交集。
>>> aset = {\"Apple\", \"Huawei\"}>>> bset = {\"Xiaomi\", \"Huawei\"}>>> aset.intersection_update(bset)>>> asetset([\'Huawei\'])
另外还可以使用 &
的操作符
>>> aset = {\"Apple\", \"Huawei\"}>>> bset = {\"Xiaomi\", \"Huawei\"}>>> aset & bsetset([\'Huawei\'])
求不重合集
如果计算两个集合中不重复的元素集合,可以使用 symmetric_difference
函数
>>> aset = {\"Apple\", \"Huawei\"}>>> bset = {\"Xiaomi\", \"Huawei\"}>>> aset.symmetric_difference(bset)set([\'Xiaomi\', \'Apple\'])
和 symmetric_difference
相似的还有一个 symmetric_difference_update
函数,它们的区别是,symmetric_difference_update
会原地更新在 aset 上,而不是直接返回。
>>> aset = {\"Apple\", \"Huawei\"}>>> bset = {\"Xiaomi\", \"Huawei\"}>>> aset.symmetric_difference_update(bset)>>> asetset([\'Apple\', \'Xiaomi\'])
4. 集合判断判断是否有某元素
>>> aset = {\"Apple\", \"Huawei\"}>>> \"Apple\" in asetTrue
判断两集合是否有相同元素
如果两集合有相同元素,则返回 False,如果没有相同元素,则返回 True
>>> aset = {\"Apple\", \"Huawei\"}>>> bset = {\"Xiaomi\", \"Huawei\"}>>> aset.isdisjoint(bset)False
判断是否是子集
>>> aset = {\"Apple\", \"Huawei\"}>>> bset = {\"Huawei\"}>>> bset.issubset(aset)True审核编辑:符乾江
<!–