博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python算法和数据结构(一)——collections模块
阅读量:3936 次
发布时间:2019-05-23

本文共 2756 字,大约阅读时间需要 9 分钟。

Python算法和数据结构(一)——collections模块

在这个分类里,我将给大家介绍 Python 的基础算法和数据结构,也会涉及到各样的面试知识
      在面试过程中,可能面试官会提出问题:“你之前有用过 Python 哪些算法和数据结构呢?”当我们遇到这样的情况的时候应该怎么去回答呢?
      首先我们揣测一下面试官的意图,他到底想问的是什么?我想到的是首先可以跟面试官讲一下 Python 内置的八大数据类型,然后由这些数据类型衍生出来的有哪些数据结构,最后一步是,当我们去运用这些数据结构的时候可以做哪些常见的算法。按照这个思路回答,也会有东西跟面试官聊,不至于不知所措。
      
重点:而且一旦涉及到数据类型,一定要想到 collections 库,collections是Python内建的一个集合模块,提供了许多有用的集合类。考官在问数据结构的时候也有极大的可能性是想知道面试者有没有用过 collections 库。

回答思路表格

1、八大数据类型

数据类型 英文
数值 number
空值 none
布尔值 bool
字符串 string
列表 list
元组 tuple
集合 set
字典 dictionary

2、数据结构和算法(collections库)

数据结构/算法 语言内置 内置库
线性结构 list/tuple array(数组,不常用) 、collections.namedtuple
链式结构 collections.deque(双端队列)
字典结构 dict collections.Counter(计数器)、OrderedDict(有序字典)
集合结构 set/frozen set
排序算法 sorted collections.deque(双端队列)
二分算法 bisect模块
堆算法 heapq模块
缓存算法 functools.Iru_cache(Least Recent Used,Python3)

接下来本文重点讨论collections模块

可以先看一下一些方法的英文文档:

方法 英文文档
namedtuple() factory function for creating tuple subclasses with named fiields
deque list-like container with fast appends and pips on either end
Counter dict subclass for counting hashable objects
OrderDict dict subclass that remembers the order entries were added
defaultDict dict subclass that calls a factory function to supply missing values

1、namedtuple

namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。

这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。

代码演示:

>>> from collections import namedtuple>>> Point = namedtuple('Point', ['x', 'y'])>>> p = Point(1, 2)>>> p.x1>>> p.y2>>> p[0]1>>> p[1]2

2、deque

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈。

代码演示:

In [1]: import collectionsIn [2]: de = collections.deque()In [3]: de.append(1)In [4]: de.appendleft(0)In [5]: deOut[5]: deque([0, 1])In [6]: de.pop()Out[6]: 1In [7]: de.popleft()Out[7]: 0In [8]: deOut[8]: deque([])

3、Counter

Counter是一个简单的计数器

代码演示:

In [9]: c = collections.Counter()In [10]: cOut[10]: Counter()In [11]: c = collections.Counter('asdfdafsasfd')In [12]: cOut[12]: Counter({
'a': 3, 's': 3, 'd': 3, 'f': 3})In [13]: c['a']Out[13]: 3In [14]: c.most_common()Out[14]: [('a', 3), ('s', 3), ('d', 3), ('f', 3)]

4、OrderedDict

使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。如果要保持Key的顺序,可以用OrderedDict

代码演示:

In [16]: od = collections.OrderedDict()In [17]: od['c'] = 'c'In [18]: od['a'] = 'a'In [19]: od['b'] = 'b'In [20]: odOut[20]: OrderedDict([('c', 'c'), ('a', 'a'), ('b', 'b')])In [21]: list(od.keys())Out[21]: ['c', 'a', 'b']

5、defaultdict

使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict

代码演示:

In [24]: dd = collections.defaultdict(int)In [25]: dd['a']Out[25]: 0In [26]: dd['d'] += 1In [27]: ddOut[27]: defaultdict(int, {
'a': 0, 'd': 1})

好啦,掌握这几个函数,就可以算是对 collections 库有基本的了解啦,我最近会把 Python 算法和数据结构这个专栏写完,请大家拭目以待吧~

嘿嘿,I am very glateful that 你看到这里了哦~下回再见ヾ(o◕∀◕)ノヾ

Thx
在这里插入图片描述

转载地址:http://unggn.baihongyu.com/

你可能感兴趣的文章
Oracle RAC on vSphere 安装手册v2
查看>>
V2V迁移
查看>>
BFD
查看>>
docker网络
查看>>
锐捷交换机的多对多镜像口
查看>>
Linux系统修改编码
查看>>
word文档不能显示图片的处理
查看>>
linux的多桌面环境Xephyr
查看>>
初探debian桌面的管理启动
查看>>
七层协议图
查看>>
华为交换机作为AC的条件
查看>>
禁用Ubuntu 15.04登录界面显示客人会话(简单-实用)
查看>>
linux X下安装的软件
查看>>
Linux监测某一时刻对外的IP连接情况
查看>>
CentOS7 最小环境安装Jumpserver 1.0版脚本
查看>>
X-Security X的安全控制
查看>>
openVAS的安装
查看>>
Centos 6.5 初始安装无网卡驱动解决方法
查看>>
linux中的网桥bridge
查看>>
linux中的teaming与bonding
查看>>