Python数据结构集合-set

集合的定义

  集合 set,collection翻译为集合类型或容器,是一个大概念。

  集合特性:

    可变、无序、不重复、可迭代的元素的集合。

示例:

集合元素

1、set集合的元素要求必须是可hash的

2、目前所学过的不可hash的类型有:list、set、bytearray、dict

3、元素不可以索引,因为无序

4、set可使用for...in迭代   

示例,如下几种写法都是错误的:

  s5 = {'a',(1,2),bytearray(b'abc')}

  s5 = {'a',(1,2),bytearray(b'abc'),(1,2,[3])}

  s5 = {'a',(1,2),bytearray(b'abc'),(1,2,[3]),{1,2}}

  s5 = {'a',(1,2),{'a':100,'b':200},bytearray(b'abc'),(1,2,[3]),{1,2}}

返回typeError,unhashable type: 'dict'  'list' 'bytearray' 'set'  

set增加

  add():增加一个元素到set中,如果元素存在则什么也不做,生成新的集合

  update(*others):合并其他元素到set集合中,参数others必须是可迭代对象,就地修改

set删除

  remove(elem):从set中移除一个元素,元素不存在则抛出异常,KeyError

  discard(elem):从set中移除一个元素,元素不存在什么都不做,则不抛异常

  pop() -->item:移除并返回任意元素,因为是无序,所有不像列表不指定则是从尾部弹出,空集返回KeyError异常

  clear():移除集合,标记为丢弃和回收资源

set修改与查询

  要么删除,要么加入新的元素,非线性结构无法索引,但是可遍历迭代所有的元素; 

  成员运算符in、not in,判断元素是否在set集合中,效率极高:

 从上图得出,线性结构查询的时间复杂度为O(n),随着规模的增大,耗时越长;

set、dict等非线性结构,内部使用了hash算法,时间复杂度可以做到O(1),查询的时间和数据规模无关。

可哈希(hash)类型:

  数值型:int、float、complex

  布尔型:True、False

  字符串:string、bytes

  元组:tuple

  None

以上都是不可变类型,称之为可哈希类型,不可hash类型有:list、set、dict、bytearray,set元素必须是可hash。 

集合

集合概念:

  全集:所有元素的集合。

  子集:

    一个集合A所有的元素都在另外一个集合B内,A是B的子集,B是A的超集;

    A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集。

  并集:多个集合合并的结果

  交集:多个集合的交汇的公共部分

  差集:集合中除去和其他集合的公共部分

  

集合运算

  并集:将两个集合元素合并在一起,组成一个新的集合,称之为A与B的并集

  union(*other):返回和多个集合合并后的新的集合,运算符为 | 

  update(*other):和多个集合合并,就地修改,运算符为 |= 

集合运算

猜你喜欢

转载自www.cnblogs.com/alrenn/p/12609501.html