集合

集合

  • 集合(set)是python中内置数据结构

  • 集合可被看做是 "没有value的字典"

    • 示例:{"Bob","Jiri","Siri"}
    特点
    • 集合的元素是无序

    • 集合元素不能重复

    • 集合是可变的

    • 集合允许数学运算

    • 集合在内存中分散存储

      • 优点:提取速度高
      • 缺点:浪费内存空间,这一整块都是为了这一个集合开辟的,但是对于当前的存储在计算hash之后他的数据都不是连续的存放在内存区域中,而是通过散列值对应,中间留下许多空余的空间,对与这些空间来说不再有新的数据产生那这些内存将会是被浪费的
      image-20200317192456010
集合创建
  • 使用{}

    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
posted @ 2020-04-16 09:17  浮沉i66  阅读(172)  评论(0)    收藏  举报