Python中的set集合

时间:2021-07-14
本文章向大家介绍Python中的set集合,主要包括Python中的set集合使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

集set

  • set是可变的、无须的、不会重复的元素集合

set的元素特点

  • set的元素必须可以hash
  • set的元素不可索引
  • set的元素可以迭代

set集的创建

set(range(9))
s1 = {1,2,'a'}
  • 不可使用s1 = {}来创建,因为{}为字典的创建方式
  • 使用{}方式创建参数必须为可hash对象
  • 使用set()方式创建参数必须为可迭代对象,此方式会将迭代对象解析为可hash元素
In [9]: set(1,2)
TypeError: set expected at most 1 arguments, got 2
  
In [11]: s1 = {1,2,[2,3]}
TypeError: unhashable type: 'list'

set增加元素

  • add(elem)
    • 增加一个元素到set中
    • 如果元素存在,什么都不做
  • update(*others)
    • 合并其他元素到set集中
    • 参数others必须为可迭代对象,可为多个可迭代对象
    • 原处修改
# add
In [16]: s1
Out[16]: {1, 2, 4}
In [17]: s1.add(5)
In [18]: s1.add(1)
In [19]: s1
Out[19]: {1, 2, 4, 5}

# update
In [20]: s2 = {'a', 2, '2', 'c'}
In [21]: s1.update(s2)
In [22]: s1
Out[22]: {1, 2, '2', 4, 5, 'a', 'c'}

set移除元素

  • remove(elem)
    • 从set中移除指定的元素
    • 元素不存在,抛出keyError异常
      • remove时会根据给定的值的hash来做移除操作,故如不存在会抛出keyError异常
  • discard(elem)
    • 从set中移除指定的元素
    • 元素不存在,什么都不做
  • pop()—>item
    • 移除并返回任意的元素。
      • 因set中元素为无序的,故为随机元素
    • 空集使用pop返回keyError异常
  • clear()
    • 移除所有元素
In [23]: s1.remove(2)
In [24]: s1
Out[24]: {1, '2', 4, 5, 'a', 'c'}

In [25]: s1.remove(2)
KeyError: 2

In [26]: s1.discard(2)

set修改元素

  • 修改
    • set没有修改元素的操作
    • 要么删除,要么添加
  • 查询
    • set为非线性结构,无法索引
  • 遍历
    • 可迭代所有元素
  • 成员运算符
    • in和not in可判断元素是否在set中
    • 判断依据为hash判断,效率很高,时间复杂度为O(1)

set效率

  • 线性结构查询时间复杂度时O(n),即随着数据规模增大而耗时增加
  • set、dict等结构,内部使用hash值作为key,不会因数据规模增大而增加耗时
  • 可hash
    • 数值型int、float
    • 布尔型
    • 字符串string、bytes
    • tuple
    • None
  • set的元素必须是可hash的

注:线性结构查询推荐使用索引(index)查询

set运算

  • 并集

    • 将两个集合中所有的元素合并在一起
    • union(*others)
      • 返回多个集合合并后的结果,返回一个新的对象
    • |运算符重载,等同于union
    • update(*others)
      • 多个集合合并,原地修改
    • |=,等同于update
  • 交集

    • 集合A和B,由所有属于A即属于B的元素组成
    • intersection(*others)
      • 返回多个集合的交集。返回一个新的对象
    • & 等同intersection
    • intersection_update(*other)
      • 获取和多个集合的交集,原处修改
    • &=,等同于intersection_update
  • 差集

    • 集合A和B,由所有属于A且不属于B的元素组成
    • Difference(*others)
      • 返回多个集合的差集,返回一个新的对象
    • -等同于difference
    • difference_update(*other)
      • 获取多个集合 的差集并在原处修改
    • -= 等同于difference_update
  • 对称差集

    • 集合A和B,由所有不属于A且不属于B的交集元素组成的集合,记作(A-B) u (B-A)
    • symmetric_differece(other)
      • 返回和另一个集合的差集
    • ^
      • 等同于symmetric_differece
    • symmetric_differece_update(other)
      • 获取和另一个集合的差集并就地修改
    • ^=
      • 等同symmetric_differece_update

集合运算

  • issubset(other)
    • 判断当前集合是否是另一个集合的子集

原文地址:https://www.cnblogs.com/larry-yu/p/15009863.html