python——collections模块

该模块实现了专门的数据类型,为Python内置数据类型dict、list、set和tuple提供了替代方案。

常用类和方法

collections模块内包括很多类,因为这些类分别继承了内置类型,所以除了新定义的方法外,还能使用超类的方法。

常见类有四个,deque生成一个双向队列,可以高效的在首尾增删元素;defaultdict建立有默认键值的字典,普通字典若检索不存在的键会报错;OrderedDict建立有序字典,顺序是键的输入顺序;Counter返回一个有记数功能的字典。
注意:defaultdict、OrderedDict和Counter都是dict的子类,本质是字典;deque本质是list。

namedtuple是一个方法,可以自定义tuple对象,定义元素名称和数量。

collections.deque([iterable[, maxlen]]) --> deque object
#生成的实例在list所有的方法上,新加了popleft、appendleft、extendleft方法
collections.defaultdict(default_factory[, ...]) --> dict with default factory
#输入:str  默认键值:''
#输入:int  默认键值:0
#输入:list  默认键值:[]
#输入:set  默认键值:set()

注意:此处输入可以使用匿名函数lambda,指定具体的默认键值,而不是如上都是空值。举例见下文。

collections.OrderedDict(builtins.dict)
#输入参数是一个python的dict类型变量,也可以不输入参数,直接建立一个空的有序字典
collections.Counter(builtins.dict)
#若有输入参数,则对其记数,输入参数可以是字符串、列表、字典、集合等;也可以没有输出参数,创建一个空的统计字典
collections.namedtuple(typename, field_names, *, verbose=False, rename=False, module=None)
#返回对象具有tuple的不变性,同时可以使用命名引用元素

示例

deque
import collections
data=collections.deque([1,2,3])
#deque([1, 2, 3])
data.append(4)
data.appendleft(0)
#deque([0, 1, 2, 3, 4])
data.pop()
data.popleft()
#deque([1, 2, 3])
#deque可以生成一个双向队列,首尾均可以方便的添加、删除元素。
#输入若为字符串,则自动转为列表
defaultdict
import collections
data=collections.defaultdict(str)
data  # defaultdict(str, {})  表示生成了一个默认键值为''的字典
data['a']  # '' 因为字典中没有'a'键,输出空字符串
data=collections.defaultdict(lambda: 5)
#默认键值为5
data=collections.defaultdict(lambda: [1,2])
#默认键值为[1,2]
OrderedDict
import collections
data=collections.OrderedDict()
data['c']=1
data['b']=1
data['a']=1
data    # OrderedDict([('c', 1), ('b', 1), ('a', 1)])  字典内部顺序取决于输入顺序
Counter
import collections
collections.Counter('445322264')
#Counter({'4': 3, '5': 1, '3': 1, '2': 3, '6': 1})  对字符串进行了统计的字典
collections.Counter(['abc','ss','abc','s','ss'])
#Counter({'abc': 2, 'ss': 2, 's': 1})
collections.Counter('445322264').most_common(3)
#[('4', 3), ('2', 3), ('5', 1)]   
#most_common是Counter类的方法,可以列出n个最多的元素,从大到小排列,若n为None,则全列出。
namedtuple
import collections
coordinate=collections.namedtuple('coordinate',['x','y','z'])
p=coordinate(1,2,3)
p.x  # 1
p    # coordinate(x=1,y=2,z=3)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章