栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

零基础学 Python(14):数据结构之集合

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

零基础学 Python(14):数据结构之集合

数据结构之集合
  • 1. 创建集合
  • 2. 增删改查
    • 删除元素
    • 修改元素
  • 3. 集合运算
    • 求合集
    • 求差集
    • 求交集
    • 另外还可以使用 & 的操作符
    • 求不重合集
  • 4. 集合判断
    • 判断是否有某元素
    • 判断两集合是否有相同元素
    • 判断是否是子集

集合(英文名 set),它是一个无序的不重复元素序列。
这里面有两个重点:
无序, 不重复

1. 创建集合

集合的创建有两种方法

第一种方法:使用 花括号 {} 直接创建,创建的时候,{} 可以包含有重要的元素,但是创建完后,集合会去重,只留第一个。

>>> aset = {"Python测试开发", "Java测试开发", "M哥o3o"}
>>> aset
set(['Java测试开发', 'M哥o3o', 'Python测试开发'])

第二种方法:使用 set() 方法进行创建,当set() 函数不接任何参数时,创建的是空集合,如果不创建空集合,可以传入一个列表。

>>> bset = set()  # 空集合
>>> bset
set([])
>>>
>>> cset = set(["Python测试开发", "Java测试开发", "M哥o3o"])
>>> cset
set(['Java测试开发', 'Python测试开发', 'M哥o3o'])
2. 增删改查

增加元素
使用 add 函数可以往集合中传入函数

>>> aset = set()
>>>
>>> aset
set([])
>>> aset.add("Python测试开发")
>>> aset.add("Java测试开发")
>>> aset
set(['Java测试开发', 'Python测试开发'])

另外,还可以使用 update 函数,来往集合中添加元素,update 函数后可接集合,列表,元组,字典等。

这是接集合的例子

>>> aset = set()
>>> aset
set([])
>>>
>>> # 接集合
>>> aset.update({"Python测试开发"})
>>> aset
set(['Python测试开发'])
>>>
>>> # 接列表
>>> aset.update(["Java测试开发"])
>>> aset
set(['Java测试开发', 'Python测试开发'])
>>>
>>> # 接元组
>>> aset.update(("M哥o3o",))
>>> aset
set(['Java测试开发', 'Python测试开发', 'M哥o3o'])
>>>
>>> # 接字典
>>> aset.update({"VIVO": "xxxx"})
>>> aset
set(['Java测试开发', 'Python测试开发', 'VIVO', 'M哥o3o'])
删除元素

使用 remove 函数可以删除集合中的元素

>>> aset = {"Python测试开发", "Java测试开发", "M哥o3o"}
>>> aset.remove("M哥o3o")
>>> aset
set(['Java测试开发', 'Python测试开发'])

使用 remove 函数,如果对应的元素不存在,是会报错的。

>>> aset = {"Python测试开发", "Java测试开发", "M哥o3o"}
>>> aset.remove("VIVO")
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'VIVO'

对于这种情况,你可以使用 discard 函数,存在元素则移除,不存在也不会报错。

>>> aset = {"Python测试开发", "Java测试开发", "M哥o3o"}
>>> aset.discard("VIVO")
>>> aset
set(['Java测试开发', 'M哥o3o', 'Python测试开发'])

此外,还有一个 pop 函数,用于从集合中随机删除元素,和列表、字典的 pop 不一样,这里的 pop 不能加任何的参数。

>>> aset = {"Python测试开发", "Java测试开发", "M哥o3o"}
>>> aset.pop()
'Java测试开发'
>>> aset.pop()
'M哥o3o'
>>> aset.pop()
'Python测试开发'

最后,还要介绍一个 clear 函数,它用于清空集合的元素。

>>> aset = {"Python测试开发", "Java测试开发", "M哥o3o"}
>>> aset
set(['Java测试开发', 'M哥o3o', 'Python测试开发'])
>>> aset.clear()
>>> aset
set([])
修改元素

文章开头处,已经说明了集合是 无序 的,因此集合是没有索引的。
既然没有索引,修改也无从谈起。
记住:集合只有添加元素、删除元素。

查询元素
同上,没有顺序,也就没有索引,没有索引,查询也无从谈起。
但是我们可以查看集合的其他内容
比如,查看集合的长度

>>> aset = {"Python测试开发", "Java测试开发", "M哥o3o"}
>>> len(aset)
3
3. 集合运算 求合集

将两个集合进行合并并去重,可以使用 union 函数,下面的示例中,由于 Java测试开发 是重复的元素,只会保留一个。

>>> aset = {"Python测试开发", "Java测试开发"}
>>> bset = {"M哥o3o", "Java测试开发"}
>>> aset.union(bset)
set(['Java测试开发', 'Python测试开发', 'M哥o3o'])

另外还可以使用 | 的操作符

>>> aset = {"Python测试开发", "Java测试开发"}
>>> bset = {"M哥o3o", "Java测试开发"}
>>> aset | bset
set(['Java测试开发', 'Python测试开发', 'M哥o3o'])
求差集

要找出存在集合 A 但是不存在 集合 B 的元素,就是对两个集合求差集。

可以使用 difference 函数,下面的示例中, Python测试开发 在 aset 中存在,但在 bset 中不存在。

>>> aset = {"Python测试开发", "Java测试开发"}
>>> bset = {"M哥o3o", "Java测试开发"}
>>> aset.difference(bset)
set(['Python测试开发'])

另外还可以使用 - 的操作符,更加直观

>>> aset = {"Python测试开发", "Java测试开发"}
>>> bset = {"M哥o3o", "Java测试开发"}
>>> aset - bset
set(['Python测试开发'])
求交集

要找出存在集合 A 并且存在集合 B 的元素,就是对两个集合求交集。
可以使用 intersection 函数

>>> aset = {"Python测试开发", "Java测试开发"}
>>> bset = {"M哥o3o", "Java测试开发"}
>>> aset.intersection(bset)
set(['Java测试开发'])
>>>

和 intersection 相似的还有一个 intersection_update 函数,它们的区别是,intersection_update 会原地更新在 aset 上,而不是会回交集。

>>> aset = {"Python测试开发", "Java测试开发"}
>>> bset = {"M哥o3o", "Java测试开发"}
>>> aset.intersection_update(bset)
>>> aset
set(['Java测试开发'])
另外还可以使用 & 的操作符
>>> aset = {"Python测试开发", "Java测试开发"}
>>> bset = {"M哥o3o", "Java测试开发"}
>>> aset & bset
set(['Java测试开发'])
求不重合集

如果计算两个集合中不重复的元素集合,可以使用 symmetric_difference 函数

>>> aset = {"Python测试开发", "Java测试开发"}
>>> bset = {"M哥o3o", "Java测试开发"}
>>> aset.symmetric_difference(bset)
set(['M哥o3o', 'Python测试开发'])

和 symmetric_difference 相似的还有一个 symmetric_difference_update 函数,它们的区别是,symmetric_difference_update 会原地更新在 aset 上,而不是直接返回。

>>> aset = {"Python测试开发", "Java测试开发"}
>>> bset = {"M哥o3o", "Java测试开发"}
>>> aset.symmetric_difference_update(bset)
>>> aset
set(['Python测试开发', 'M哥o3o'])
4. 集合判断 判断是否有某元素
>>> aset = {"Python测试开发", "Java测试开发"}
>>> "Python测试开发" in aset
True
判断两集合是否有相同元素

如果两集合有相同元素,则返回 False,如果没有相同元素,则返回 True

>>> aset = {"Python测试开发", "Java测试开发"}
>>> bset = {"M哥o3o", "Java测试开发"}
>>> aset.isdisjoint(bset)
False
判断是否是子集
>>> aset = {"Python测试开发", "Java测试开发"}
>>> bset = {"Java测试开发"}
>>> bset.issubset(aset)
True
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960583.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号