集合
集合
-
集合(set)是python中内置数据结构
-
集合可被看做是 "没有value的字典"
- 示例:
{"Bob","Jiri","Siri"}
特点
-
集合的元素是无序的
-
集合元素不能重复
-
集合是可变的
-
集合允许数学运算
-
集合在内存中分散存储
- 优点:提取速度高
- 缺点:浪费内存空间,这一整块都是为了这一个集合开辟的,但是对于当前的存储在计算hash之后他的数据都不是连续的存放在内存区域中,而是通过散列值对应,中间留下许多空余的空间,对与这些空间来说不再有新的数据产生那这些内存将会是被浪费的
- 示例:
集合创建
-
使用{}
s = {"山东", "湖北", "黑龙江"} print(s) # {'湖北', '山东', '黑龙江'}每次运行返回的结果是不同的
-
使用set()函数创建集合
set() 内置函数从其他数据结构转换
set(["山东", "湖北", "黑龙江"])创建字符串集合
s = set("你好世界") print(s) # {'界', '世', '好', '你'}空集合的创建
s = {} # 错误创建方式 创建的是字典 print(type(s) # <class 'dict'> s = set() #正确 print(s) # set()将字典放入集合
s = set({"username": "bob", "password": "22"}) print(s) # {'username', 'password'}
集合关系与数学运算
交集 intersection(set1, set2 ... etc)
说明 两个集合之间都存在的元素
s1 = {"山东", "湖北", "黑龙江"}
s2 = {"山东", "湖北", "广西","江苏"}
s3 = s1.intersection(s2)
print(s3)
# {'山东', '湖北'}
intersection_update()
功能
-
用于获取两个或更多集合中都重叠的元素,即计算交集
-
在原始的集合上移除不重叠的元素。
参数
- set1 -- 必需,要查找相同元素的集合
- set2 -- 可选,其他要查找相同元素的集合,可以多个,多个使用逗号 , 隔开
语法
set.intersection_update(set1, set2 ... etc)
s1 = {"山东", "湖北", "黑龙江"}
s2 = {"山东", "湖北", "广西","江苏"}
s1.intersection_update(s2)
print(s1) #更新原有集合
# {'山东', '湖北'}
s1 = {"山东", "湖北", "黑龙江"}
s2 = {"山东", "深圳", "广西", "江苏"}
s3 = {"山东", "湖北", "广西", "江苏"}
s1.intersection_update(s2,s3) #查找多个相同元素的集合
print(s1)
# {'山东'}
并集 union()
说明 将两个集合并,去除重复的,则形成一个新的完整的集合
s1 = {"山东", "湖北", "黑龙江"}
s2 = {"山东", "湖北", "广西","江苏"}
s3 = s1.union(s2)
print(s3)
# {'山东', '江苏', '湖北', '黑龙江', '广西'}
差集 difference()
说明 两个集合中,在另一方中不存在的
s1 = {"山东", "湖北", "黑龙江"}
s2 = {"山东", "广西","江苏"}
s3 = s1.difference(s2)
# 得到A在B集合不存在的部分
print(s3)
# {'湖北', '黑龙江'}
symmetric_difference()
功能 双向差集,两个集合中不重复的元素集合,即会移除两个集合中都存在的元素
语法
set.symmetric_difference(set)
参数
- set -- 集合
返回 一个新的集合
示例
s1 = {"山东", "湖北", "黑龙江"}
s2 = {"山东", "深圳"}
s3 = s1.symmetric_difference(s2)
print(s3)
# {'黑龙江', '湖北', '深圳'}
difference_update()
功能 差集,并更新原有集合
symmetric_difference_update()
集合操作
集合不支持按索引提取数据
新增数据
-
add(elmnt)
s1 = {"山东", "湖北", "黑龙江"} s1.add("香港")一次只能添加一个元素
添加重复元素会被忽略
-
update(set)
参数元素(列表)或者集合s1 = {"山东", "湖北", "黑龙江"} s1.update(["浙江","广西"])一次添加多个元素
更新数据
集合不支持更新操作
更新操作是删除原有元素,在创建新元素
# 将山东修改江苏
s1 = {"山东", "湖北", "黑龙江"}
# 删除元素
# remove 如果删除不存在的元素,会报错
# s1.remove("山东")
# discard 如果遇到不存在的元素时,则会忽略删除操作
s1.discard("山东")
# 添加
s1.add("江苏")
print(s1)
# {'湖北', '江苏', '黑龙江'}
删除
- remove()
- 如果删除不存在的元素,会报错
- discard()
- 如果遇到不存在的元素时,则会忽略删除操作
集合的遍历
s = {'黑龙江', '湖北', '深圳'}
for item in s:
print(item)
"""
深圳
湖北
黑龙江
"""
判断元素存在
s = {'黑龙江', '湖北', '深圳'}
print("湖北" in s)
# True
集合关系操作
判断两个集合元素是否完全相同
s1 = {1,2,3,4,5,6}
s2 = {6,4,5,3,2,1}
print(s1 == s2)
# True
可以前后位置不同,但必须一一对应
"==" 判断两个集合元素是否完全相同
判断是否为"子集"
s1 = {1,2,3}
s2 = {6,4,5,3,2,1}
print(s1.issubset(s2))
# True
判断s1是否在s2中
判断集合的所有元素是否都包含在指定集合中
判断是否为"父集"
s1 = {1,2,3}
s2 = {6,4,5,3,2,1}
print(s2.issuperset(s1))
# True
与issubset相反
判断两个元素是否存在重复元素
函数 isdisjoint()
返回
- true代表不存在重复元素
- false 代表存在重复元素
s1 = {9}
s2 = {6,4,5,3,2,1}
print(s2.isdisjoint(s1))
# True

浙公网安备 33010602011771号