社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

生信修炼手册 • 5 年前 • 642 次点击  

欢迎关注”生信修炼手册”!
python内置的基本数据结构有以下几种
  1. list

  2. tuple

  3. set

  4. dict

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

1. Counter
Counter用于对元素进行计数,用法如下
>>> 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. namedtuple

nameedtuple称之为命名元组,相当于为每个元素添加一个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]22

3. deque

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

>>> from collections import deque>>> a = deque([1, 2, 3, 4])# 右侧添加一个元素>>> a.append(5)>>> adeque([1, 2, 3, 4, 5])# 左侧添加一个元素>>> a.appendleft(0)>>> a


    
deque([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 <module>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(<class 'list'>, {'one': [1, 2, 3, 4, 5]})
# 创建双层字典# 命名value的默认值为dict>>> a = defaultdict(dict)>>> a['one']['tow'] = 1>>> a['one']['three'] = 2>>> adefaultdict(<class 'dict'>, {'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/Django开发社区
本文地址:http://www.python88.com/topic/63128
 
642 次点击