ydswin

忘记背后,努力面前的,向着标杆直跑

导航

Python collections详细介绍及实例

Python的collections库提供了许多有用的数据结构,这些数据结构是对内建数据类型的补充。以下是一些collections库中主要数据结构的详细介绍和示例:

  1. Counter

    Counter是一个字典子类,用于计数可哈希对象。常用于统计字符出现的次数、列表中元素出现的次数等。

    示例:

    from collections import Counter  
     
    # 统计字符出现的次数  
    c = Counter('gallahad')  
    print(c)  # 输出:Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})  
     
    # 统计列表中元素出现的次数  
    lst = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']  
    c = Counter(lst)  
    print(c)  # 输出:Counter({'apple': 3, 'banana': 2, 'orange': 1})
    
  2. defaultdict

    defaultdict是一个字典子类,它覆盖了字典的一个方法以提供一个默认值供字典项查找。当请求的键在字典中不存在时,defaultdict将使用一个函数自动创建它。

    示例:

    from collections import defaultdict  
     
    # 当键不存在时,默认值为0  
    d = defaultdict(int)  
    for k in 'abcd':  
        d[k] += 1  
    print(d)  # 输出:defaultdict(<class 'int'>, {'a': 1, 'b': 1, 'c': 1, 'd': 1})
    
  3. OrderedDict

    OrderedDict是一个字典子类,它保持它的键值对的插入顺序。一个OrderedDict将记住元素被第一次插入的顺序。如果一个新的元素覆盖了已经存在的键,原始插入位置将保持不变。

    示例:

    from collections import OrderedDict  
     
    d = OrderedDict()  
    d['first'] = 1  
    d['second'] = 2  
    d['third'] = 3  
    d['last'] = 4  
    print(d)  # 输出顺序和插入顺序相同
    
  4. namedtuple

    namedtuple是一个函数,它生成元组子类,这些子类有命名的字段。就像普通的元组一样,namedtuple是不可变的。

    示例:

    from collections import namedtuple  
     
    # 定义一个具有x和y属性的Point类  
    Point = namedtuple('Point', ['x', 'y'])  
    p = Point(11, y=22)  
    print(p[0] + p[1])  # 输出:33
    
  5. deque

    deque是一个双端队列,它具有线程安全,内存高效的添加(append)和弹出(pop),从两端都可以操作,并且具有有限的长度。

    示例:

    from collections import deque  
     
    d = deque('ghi')  # 输出deque(['g', 'h', 'i'])  
    d.append('j')     # 在右边添加一个新元素  
    d.appendleft('f') # 在左边添加一个新元素  
    print(d)          # 输出:deque(['f', 'g', 'h', 'i', 'j'])
    
  6. ChainMap

    ChainMap是一个字典类,它可以将多个字典看作一个单一字典,实现了一种逻辑上的而非物理上的合并。

    示例:

    from collections import ChainMap  
     
    d1 = {'a': 1, 'b': 2}  
    d2 = {'b': 2, 'c': 3}  
    d3 = {'c': 3, 'd': 4}  
     
    # 合并三个字典  
    d = ChainMap(d1, d2, d3)  
    print(d)  # 输出:ChainMap({'a': 1, 'b': 2}, {'b': 2, 'c': 3}, {'c': 3, 'd': 4})  
    print(d['a'])  # 输出:1  
    print(d['b'])  # 输出:2,注意这里的值是第一个找到的b键对应的值  
    print(d['c'])  # 输出:3  
    print(d['d'])  # 输出:4
    

collections库中的数据结构功能丰富,为Python提供了更多样化的数据处理能力。上述数据结构都设计得相对简洁和高效,通常能够提供更好的性能和更方便的用法。

posted on 2024-03-13 18:32  dashery  阅读(83)  评论(0编辑  收藏  举报