Python基础-常用内建模块 collections

namedtuple,直观地定义数据类型

运行示例

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 常用内建模块-namedtuple,直观地定义数据类型
from collections import namedtuple

# namedtuple 形象地定义一个点坐标
def ponitDemo():
    Point = namedtuple("Point", ["x", "y"])
    p = Point(1, 2)

    print("坐标(%d,%d)"%(p.x, p.y))

# namedtuple 形象地定义一个圆
def circleDemo():
    Circle = namedtuple("Circle", ["x","y","r"])
    c = Circle(0, 0, 5)

    print("圆心(%d,%d)半径%d的圆"%(c.x, c.y,c.r))

def runTest():
    ponitDemo()
    circleDemo()

runTest()

运行结果

D:\PythonProject\sustudy>python main.py
坐标(1,2)
圆心(0,0)半径5的圆

deque 提供插入和删除效率

deque 是为了高效实现插入和删除操作的双向列表,适合用于队列和栈

示例

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 常用内建模块-deque
from collections import deque

# deque 是为了高效实现插入和删除操作的双向列表,适合用于队列和栈    
def runTest():
    q = deque(["a", "b", "c"])
    q.append("append")
    q.appendleft("appendleft")

    # deque(['appendleft', 'a', 'b', 'c', 'append'])
    print(q)

runTest()

运行结果

D:\PythonProject\sustudy>python main.py
deque(['appendleft', 'a', 'b', 'c', 'append'])

defaultdict

示例

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 常用内建模块 - defaultdict
from collections import defaultdict

# 使用dict时,如果引用的Key不存在,就会抛出KeyError。
# 如果希望key不存在时,返回一个默认值,就可以用defaultdict
def runTest():
    # 不存在则返回"N/A"
    dd = defaultdict(lambda:"N/A")

    dd["key_yes_exit"] = "key_yes_exit"
    print(dd["key_yes_exit"])

    # 不存在则返回"N/A"
    print(dd["key_no_exit"])

runTest()

运行结果

D:\PythonProject\sustudy>python main.py
key_yes_exit
N/A

OrderedDict-确定顺序的 Dict

运行示例

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 常用内建模块 - OrderedDict
from collections import OrderedDict

# 可以确定顺序的 Dict
def runTest():
    d = dict([("aa", "11"), ("bb", "22"), ("cc", "33")])
    print("无顺序的dict", d)

    od = OrderedDict([("aa", "11"), ("bb", "22"), ("cc", "33")])
    print("有顺序的dict", od)

runTest()

OrderedDict可以实现一个FIFO(先进先出)的dict

OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:

from collections import OrderedDict

class LastUpdatedOrderedDict(OrderedDict):

    def __init__(self, capacity):
        super(LastUpdatedOrderedDict, self).__init__()
        self._capacity = capacity

    def __setitem__(self, key, value):
        containsKey = 1 if key in self else 0
        if len(self) - containsKey >= self._capacity:
            last = self.popitem(last=False)
            print('remove:', last)
        if containsKey:
            del self[key]
            print('set:', (key, value))
        else:
            print('add:', (key, value))
        OrderedDict.__setitem__(self, key, value)

计数器 Counter

示例代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 常用内建模块 - Counter
from collections import Counter

# 计数器 Counter
def runTest():
    c = Counter()
    for i in "Hello,Python":
        c[i] = c[i] + 1

    # Counter({'l': 2, 'o': 2, 'H': 1, 'e': 1, ',': 1, 'P': 1, 'y': 1, 't': 1, 'h': 1, 'n': 1})
    print(c)

runTest()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值