zoukankan      html  css  js  c++  java
  • python容器相关类 -- 集合(set)和双端队列(deque)

      在Python中,除了列表(list)、元组(tuple)、字典(dict)等常见的容器类型外,还提供了集合(set)、双端队列(deque)等数据类型。

      set:

        1,不能记录元素的的添加顺序。

        2,元素不可重复。(可以利用这一点为列表的元素去重)

        3,是可变容器,可以改变容器中的元素。

        4,还有一个不可变版本 -- frozenset。

      set 的内置方法:

    1 >>> [e for e in dir(set) if not e.startswith('_')]
    2 ['add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 

    'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove',

    'symmetric_difference', 'symmetric_difference_update', 'union', 'update'] 3 >>>

       set中的方法:

      <=,相当于调用了issubset()方法,判断前面的集合是否为后面集合的子集。

      >=,相当于调用了issuperset()方法,判断前面的集合是否为后面集合的父集。

      -,相当于调用了difference()方法,用前面的集合减去后面的集合。

      &,相当于调用了intersection方法,用于获取两个集合的交集。

      ^,计算两个集合异或的结果,就是用两个集合的并集减去交集的元素。

    >>> set_a = {1}
    >>> set_a.add(2)   #为集合添加元素
    >>> set_a
    {1, 2}
    >>> set_a.remove(1)  #移除集合中的元素,但是当移除集合中不存在的元素时会报错
    >>> set_a
    {2}
    >>> set_a.remove(1)  #当移除集合中不存在的元素时会报错
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 1
    >>> set_a.add(1)
    >>> set_a
    {1, 2}
    >>> set_a.discard(1)  #移除集合中的元素,当移除集合中不存在的元素时不会报错
    >>> set_a
    {2}
    >>> set_a.discard(1)  #当移除集合中不存在的元素时不会报错
    >>> set_a
    {2}
    >>> set_b = set()    #使用集合构造函数创建集合
    >>> set_b.add(1)
    >>> set_b.add(2)
    >>> set_b.add(3)
    >>> set_a.issubset(set_b)   #判断集合a是否为集合b的子集
    True
    >>> set_a.issuperset(set_b) #判断集合a是否是集合b的父集
    False
    >>> set_c = set_b.difference(set_a)   #用集合b减去集合a中的元素,得到一个新的集合c
    >>> set_c
    {1, 3}
    >>> set_b.difference_update(set_a)   #用集合b减去集合a中的元素,改变集合b
    >>> set_b
    {1, 3}
    >>>
    >>> set_c.clear()        #清除集合c中的元素
    >>> set_c
    set()
    >>> set_b.add(2)
    >>> set_b
    {1, 2, 3}
    >>> set_a
    {2}
    >>> set_c = set_b.intersection(set_a)   #计算两个集合的交集,得到一个新的集合c
    >>> set_c
    {2}
    >>> set_b.intersection_update(set_a)  #计算两个集合的交集,改变集合b
    >>> set_b
    {2}
    
    >>> set_b.add(1) >>> set_b.add(3) >>> set_a {2} >>> set_b {1, 2, 3} >>> set_a.add(4) >>> set_c = set_a.union(set_b) #计算两个集合的并集,得到一个新的集合 >>> set_c {1, 2, 3, 4} >>> set_a.update(set_b) #计算两个集合的并集,改变集合a >>> set_a {1, 2, 3, 4}
    >>> set_a {1, 2, 3, 4} >>> set_b {1, 2, 3}>>> set_a.isdisjoint(set_b) #判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 False >>> set_b.isdisjoint(set_b) False >>> set_b.isdisjoint(set_a) False >>> set_a {1, 2, 3, 4} >>> set_b {1, 2, 3} >>> set_a.symmetric_difference(set_b) #返回两个集合中不重复的元素集合。 {4} >>> set_a.symmetric_difference_update(set_b) #移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中 >>> set_a {4} >>>

      双端队列(deque):

        1,其代表一种特殊的队列,它可以在两端同时进行插入、删除操作。

        2,如果程序将所有的插入、删除操作都固定在一端进行,那么这个双端队列就变成了栈。

        3,如果固定在一端只添加元素,在另一端只删除元素,那么这个双端队列就变成了队列。

        4,deque的左边(left)就相当于它的队列头(front),右边(right)就相当于它的队列尾(rear)。

      双端队列的方法: 

    >>> from collections import deque   #deque 位于collections包下
    >>> [e for e in dir(deque) if not e.startswith('_')]
    ['append', 'appendleft', 'clear', 'copy', 'count', 'extend', 'extendleft', 

    'index', 'insert', 'maxlen', 'pop', 'popleft', 'remove', 'reverse', 'rotate'] >>>

       1,append 和 appendleft:在deque的右边或者左边添加元素,默认在队列尾添加元素。

       2,pop 和 popleft:在deque的右边或者左边弹出元素,也就是默认在队列的尾弹出元素。

       3,extend 和 extendleft:在deque的右边或者左边添加多个元素,也就是默认在队列的尾添加多个元素。

       4,clear 用于清空队列。

       5,insert 则是线性表的方法,用于在指定位置插入元素。

       6,rotate 将队列的队尾元素移动到队头,使之首尾相连。

      双端队列方法的使用:   

    >>> from collections import deque
    
    >>> stack_ = deque(('zhao','qian','sun','li'))
    >>> stack_.append('zhou')
    >>> stack_
    deque(['zhao', 'qian', 'sun', 'li', 'zhou'])
    >>> stack_.pop() 'zhou' >>> stack_.pop() 'li' >>> stack_ deque(['zhao', 'qian', 'sun']) >>> stack_.popleft() 'zhao' >>> stack_ deque(['qian', 'sun'])
    >>> stack_.appendleft('li') >>> stack_ deque(['li', 'qian', 'sun']) >>> >>> stack_.appendleft('zhou') >>> stack_ deque(['zhou', 'li', 'qian', 'sun'])
    >>> stack_.rotate() #旋转一次,首尾相连 >>> stack_ deque(['sun', 'zhou', 'li', 'qian']) >>> stack_.rotate() >>> stack_ deque(['qian', 'sun', 'zhou', 'li']) >>> stack_.rotate() >>> stack_ deque(['li', 'qian', 'sun', 'zhou']) >>>



    微信扫码,介绍更全面详细。



  • 相关阅读:
    利用Java API通过路径过滤上传多文件至HDFS
    docker-compose部署haproxy
    PM2 常用命令
    shell脚本循环访问url直到状态码返回200跳出循环
    CentOS 7.6安装配置Chrony同步系统时钟
    PostgreSQL9.5数据库锁表问题分析与解决
    linux系统netstat命令详解(netstat常用运维命令)
    linux目录备份脚本
    PostgreSQL 锁等待监控 珍藏级SQL
    docker部署pgadmin4并通过nginx反向代理
  • 原文地址:https://www.cnblogs.com/xuxianshen/p/12384316.html
Copyright © 2011-2022 走看看