如何使用python collections模块中提供的数据结构?

转载自品略图书馆 http://www.pinlue.com/article/2020/05/2111/2410577771956.html

 

python内置的基本数据结构有以下几种list

tuple

set

dict

这些基础的数据结构已经能够满足开发中的大多数需求,但是针对某些特殊场景,用基本的数据结构来实现,还是不够简便。为此,python内置了collections模块,在基本数据结构的基础上进行了扩展,提出了以下几种更具针对性的数据结构

1. CounterCounter用于对元素进行计数,用法如下

>>> from collections import Counter>>> Counter([1, 2, 3, 2, 2, 1])Counter({2: 3, 1: 2, 3: 1})>>> a = Counter([1, 2, 3, 2, 2, 1])# 类似字典的访问方式>>> a[2]3>>> a[1]2>>> a[3]1利用Counter,可以方便的提取topN的元素,用法如下

# 提取出现次数最多的两个元素>>> a.most_common(2)[(2, 3), (1, 2)]# 提取出现次数最少的元素>>> a.most_common()[-1](3, 1)2. namedtuplenameedtuple称之为命名元组,相当于为每个元素添加一个name属性,增加了代码的可读性,可以通过name来访问对应的元素,用法如下

>>> from collections import namedtuple>>> info = namedtuple("info", ["name", "age"])>>> info("Andy", 22)info(name="Andy", age=22)>>> a = info("Andy", 22)>>> ainfo(name="Andy", age=22)>>> a.name"Andy">>> a.age22>>> a[0]"Andy">>> a[1]223. deque

deque是一个双向的队列,可以快速的在头部和尾部添加元素,用法如下

>>> from collections import deque>>> a = deque([1, 2, 3, 4])# 右侧添加一个元素>>> a.append(5)>>> adeque([1, 2, 3, 4, 5])# 左侧添加一个元素>>> a.appendleft(0)>>> adeque([0, 1, 2, 3, 4, 5])# 右侧删除一个元素>>> a.pop()5>>> adeque([0, 1, 2, 3, 4])# 左侧删除一个元素>>> a.popleft()0>>> adeque([1, 2, 3, 4])# 右侧添加多个元素>>> a.extend([5,6])>>> adeque([1, 2, 3, 4, 5, 6])# 左侧添加多个元素>>> a.extendleft([-1,0])>>> adeque([0, -1, 1, 2, 3, 4, 5, 6])# 在指定的下标处,插入元素>>> a.insert(1, "x")>>> adeque([0, "x", -1, 1, 2, 3, 4, 5, 6])# 删除指定的元素>>> a.remove("x")>>> adeque([0, -1, 1, 2, 3, 4, 5, 6])# 查找特定元素,返回下标>>> a.index(2)3# 将队列逆序排列>>> a.reverse()>>> adeque([6, 5, 4, 3, 2, 1, -1, 0])# 统计指定元素出现的次数>>> a.count(4)1# 清空队列>>> a.clear()>>> adeque([])4. defaultdict

内置dict是没有默认值的,对于某个key,必须先定义其value之后才可以访问,最典型的就是计数

# key不存在,直接对其值进行加1操作,会报错>>> a = dict()>>> a["a"] += 1Traceback (most recent call last): File "", line 1, in KeyError: "a">>># 先声明一个值,再进行加1 操作,正常执行>>>>>> a["a"] = 0>>> a["a"] += 1>>> a["a"]1每次声明默认值很麻烦,defaultdict的作用就是在声明dict时就设置value的默认值,经典的使用场景如下

# 创建值为列表的字典# 表明value的默认值为list>>> from collections import defaultdict>>> a = defaultdict(list)>>> num = [1, 2, 3, 4, 5]>>> for i in num:... a["one"].append(i)...>>>>>> adefaultdict(, {"one": [1, 2, 3, 4, 5]})

# 创建双层字典# 命名value的默认值为dict>>> a = defaultdict(dict)>>> a["one"]["tow"] = 1>>> a["one"]["three"] = 2>>> adefaultdict(, {"one": {"tow": 1, "three": 2}})5. OrderedDcit

在python3.7版本以前,字典key的顺序是乱序的,OrderedDcit的作用就是按照key插入的顺序来遍历字典,用法如下

# python 3.5# key 乱序>>> info = dict([("Andy", 24), ("John", 26), ("Rose", 22)])>>> for key in info:... print("name: {} age: {}".format(key, info[key]))...name: John age: 26name: Andy age: 24name: Rose age: 22

# OrderedDict# 按照key插入的顺序>>> order_info = collections.OrderedDict([("Andy", 24), ("John", 26), ("Rose", 22)])>>> for key in order_info:... print("name: {} age: {}".format(key, info[key]))...name: Andy age: 24name: John age: 26name: Rose age: 22在python3.7之后,内置的dict默认就是按照key插入的顺序来记录的,不需要在借助OrderedDcit来实现上述操作了。

·end·

你可能感兴趣的:(Python,python)