集合set

集set

可变,无序,不重复的元素的集合

set集合

collection 集合类型

s = {} #dict

list 不可以放入其中 # 元素要求必须可hash

定义方法:

  1. s1 = set(iterable) 可迭代单一值 或空集合

  2. s2 = {} {}中不可放入不可hash对象

    basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
    >>> print(basket)                      # 这里演示的是去重功能
    {'orange', 'banana', 'pear', 'apple'}
    >>> 'orange' in basket                 # 快速判断元素是否在集合内
    True
    >>> 'crabgrass' in basket
    False
    
运算方法
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 集合a中包含而集合b中不包含的元素
{'r', 'd', 'b'}
>>> a | b                              # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 集合a和b中都包含了的元素
{'a', 'c'}
>>> a ^ b                              # 不同时包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}

集合推导式

>>>a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}
去重

整型在set中无论在元组或直接在set中,重复会被去掉

同类型同hash值会被去重

方法

增加

set.update(*others) others 可为多个值或另一个集合,但必须为可迭代对象

set.add(elem) add只接收一个参数

移除

set.remove(elem) 移除一个元素,若元素不存在,抛keyerror异常 使用hash算法找到值,效率极高

set.discard(elem) 从set中移除elem,若元素不存在,什么都不做

set.pop() 随机弹出一个值,空集返回keyerror异常

set和线性结构

线性结构的查询时间复杂度为O(n),随数据规模增大而耗时增加

set,dict等非线性结构,内部使用hash值作为key,时间复杂度可以做到O(1),查询时间和数据规模无关

可hash

数值型 int,float,complex

布尔型 True False

字符串 string,bytse

tuple

None

以上都是不可变类型,成为可哈希类型,hashable

集合的运算

并集 A|B

set.union(*others) 返回两个集合的并集,生成一个新的集合

支持 |=

交集 A&B

set.intersection(*others) 返回和多个集合的交集 ,生成一个新的集合

支持 &=

差集 A-B = A - A&B

set.difference(*others) 返回和多个集合的差集,生成集合

-等同于difference

difference_update(*others) 获取和多个集合的差集并就地修改

支持 -=

对称差集 A^B = (A - B) | (B -A)

set.symmetric_difference(other) 返回一个集合与另一个集合的差集,生成新集合

set.symmetric_difference_update(other) 获取和另一个集合的差集并就地修改

支持^=

子集,真子集,交集

<= 判断子集

< 判断真子集

set.isdisjoint(other) 判断有无交集,没有交集,返回True

posted @ 2019-09-16 17:10  Agsol  阅读(123)  评论(0编辑  收藏  举报