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()