python常用的内建模块
1.collections(容器)模块
主要数据类型
- namedtuple:生成使用名字来访问元素内容迭代元组子类。是元组的增强版。
- deque:双向队列,可以从另一边添加和弹出元素。是列表的有效补充。
- OrderedDict:有序字典。字典排序功能的定制版
- defaultdict:带有默认值的字典。
- Counter:计数器,针对某些数据类型(如列表,元组等)中的元素进行计数。
namedtuple 命名版的元组
from collections import namedtuple
point=namedtuple("point",["x","y"])
#namedtuple的构造需要两个参数,元组子类的名字(point)和其属性的名字。多个属性用[]括起来
p=point(3,4)
print(p.x)
print(p.y)
- namedtuple加工出来的类依旧是元组的子类
- 在In2中,对象P是point定义出来的。可以用python的内置函数isinstance()。
- 该函数的功能是判断一个对象是否为一个已知类型的实例。
isinstance(p,point) #p是否是类point的实例
isinstance(p,tuple) #p是否是元组tuple的实例
namedtuple也可以进行索引
print(p[0])
print(p[1])
namedtuple也可以将包含多个元素的对象一次性的赋值给多个简单变量。
a,b=p
print(a)
print(b)
deque双向队列
- 列表按顺序很慢。为了实现列表的高效插入和删除操作
from collections import deque
dq=deque(["a","b","c"])
dq.append(1) #往队列的右边添加一个元素
print(dq) #验证
dq.appendleft(2) #往队列的左边插入一个元素
print(dq) #验证
dq.insert(2,"u") #在指定2位置插入元素“u”
print(dq) #验证
dq.pop() #弹出最右边的一个元素,并删除
print(dq) #验证
dq.popleft() #弹出最左边的一个元素,并删除
print(dq) #验证
dq.remove("u") #删除指定元素“u”
print(dq)
dq.reverse() #逆序
print(dq) #验证
OrderedDict 有序字典
- 普通字典是无序的,只靠键值对。
- 有序字典底层是通过双向链表实现的。
- 内部通过map()函数对指定重点序列做映射。
from collections import OrderedDict
od=OrderedDict()
od["a"]=1
od["d"]=3
od["o"]=2
print(od)
#“键”是按照元素插入顺序排列的,而不是按照键本身排序
print(list(od.keys()))
- update() 在旧字典中再追加一个新字典
keys=["aa","bb","cc"]
value=[11,22,33]
od.update(zip(keys,value))
print(od)
#pop()
od.pop("bb")
#弹出键为“bb”的字典,并删除
print(od)
od.move_to_end("o")
#将键为“o”的元素移到队尾
print(od)
defaultdict提供默认值的字典类型defaultdict
- 使用字典时,如果所引用的键不存在,就会抛出异常,导致程序终值
- defaultdict提供如果键不存在则返回一个默认值。
from collections import defaultdict
dd=defaultdict(lambda:"N/A") #设置默认值
dd["key1"]="abc"
print(dd["key1"])
print(dd["key2"])
abc
N/A
Counter 计数器
- 一般计算
colors=["red","blue","green","red","yellow","orange","blue"]
result={} #创建空字典
for color in colors:
if result.get(color)==None: #如果是字典的新元素
result[color]=1 #添加新的键值对
else:
result[color]+=1 #如果是字典的老元素,则值+1
print(result)
{‘red’: 2, ‘blue’: 2, ‘green’: 1, ‘yellow’: 1, ‘orange’: 1}
- 用Counter实现一遍
from collections import Counter
colors=["red","blue","green","red","yellow","orange","blue"]
result=Counter(colors)
print(dict(result))
print(result.most_common(2))
#输出出现频率最高的两个单词,以列表形式显示
print(result.most_common(2)[1][1])
{‘red’: 2, ‘blue’: 2, ‘green’: 1, ‘yellow’: 1, ‘orange’: 1}
[(‘red’, 2), (‘blue’, 2)]
2