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


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

回答思路表格

1、八大数据类型

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

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

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

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

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

方法英文文档
namedtuple()factory function for creating tuple subclasses with named fiields
dequelist-like container with fast appends and pips on either end
Counterdict subclass for counting hashable objects
OrderDictdict subclass that remembers the order entries were added
defaultDictdict 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.x
1
>>> p.y
2
>>> p[0]
1
>>> p[1]
2

2、deque

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

代码演示:

In [1]: import collections

In [2]: de = collections.deque()

In [3]: de.append(1)

In [4]: de.appendleft(0)

In [5]: de
Out[5]: deque([0, 1])

In [6]: de.pop()
Out[6]: 1

In [7]: de.popleft()
Out[7]: 0

In [8]: de
Out[8]: deque([])

3、Counter

Counter是一个简单的计数器

代码演示:

In [9]: c = collections.Counter()

In [10]: c
Out[10]: Counter()

In [11]: c = collections.Counter('asdfdafsasfd')

In [12]: c
Out[12]: Counter({'a': 3, 's': 3, 'd': 3, 'f': 3})

In [13]: c['a']
Out[13]: 3

In [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]: od
Out[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]: 0

In [26]: dd['d'] += 1

In [27]: dd
Out[27]: defaultdict(int, {'a': 0, 'd': 1})

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

嘿嘿,I am very glateful that 你看到这里了哦~下回再见ヾ(o◕∀◕)ノヾ
Thx
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值