算法与内置数据结构

常用算法和数据结构

sorted

dict/list/set/tuple

分析时间/空间复杂度

实现常见数据结构和算法

数据结构/算法

语言内置

内置库

线性结构

list(列表)/tuple(元祖)

array(数组,不常用)/collection.namedtuple

链式结构

collections.deque(双端队列)

字典结构

dict(字典)

collections.Counter(计数器)/OrderedDict(有序字典)

集合结构

set(集合)/frozenset(不可变集合)

排序算法

sorted

二分算法

bisect模块

堆算法

heapq模块

缓存算法

functors.lru_cache(Least Recent Used,python3)

coolections模块提供了一些内置数据结构的扩展

collections

Point = collections.namedtuple('Point','x','y')

p = Point(1,2)

namedtuple让tuple属性可读

de = collections.deque()

de.append(1)

de.appendleft(0)

c = collections.Counter()

c = coolections.Counter('abcab')

python dict 底层结构

dict底层使用的哈希表

为了支持快速查找使用了哈希表作为底层结构

哈希表平均查找时间复杂度O(1)

Cpython解释器使用二次探查解决哈希冲突问题

python list/tuple区别

都是线性结构 支持下标访问

list是可变对象,tuple保存的引用不可变

t = ([1],2,3)

t[0].append(1)

t

([1,1],2,3)

保存的引用不可变指的是你没法替换掉这个对象,但是如果对系那个本身是一个可变对象,是可以修改这个引用指向的可变对象的

list没发作为字典的key, tuple可以(可变对象不可hash)

什么是LRUCache?

Least-Recently-Used 替换掉最近最少使用的对象

缓存剔除策略,当缓存空间不够用的时候需要一种方式剔除key

常见的有LRU, LFU等

LRU通过使用一个循环双端队列不断把最新访问的key放到表头实现

字典用来缓存,循环双端链表用来记录访问顺序

利用python内置的dict + collections.OrderedDict实现

dict 用来当作k/v键值对的缓存

OrderedDict用来实现更新最近访问的key

from collections import OrderedDict

class LRUCache:

def __init__(self, capacity=128):

self.od = OrderedDict()

self.capacity = capacity

def get(self, key): #每次访问更新最新使用的key

if key in self.od:

val = self.od[key]

self.od.move_to_end(key)

return val

else:

return -1

def put(self, key, value): # 更新k/v

if key in self.od:

del self.od[key]

self.od[key] = value # 更新key 到表头

else: # insert

self.od[key] = value

# 判断当前容量是否已经满了

if len(self.od) > self.capacity:

self.od.popitem(last=False)

code/lrucache.py

算法常考点

排序+查找,重中之重

常考排序算法: 冒泡排序、快速排序、归并排序、堆排序

线性查找,二分查找等

能独立实现代码(手写), 能够分析时间空间复杂度

python web 后端常考数据结构

常见的数据结构链表、队列、栈、二叉树、堆

使用内置结构实现高级数据结构,比如内置的list/deque实现栈

leetcode或者《剑指offer》上的常见题

常考数据结构之链表

链表有单链表、双链表、循环双链表

如何使用python 来表示链表结构

实现链表常见操作,比如插入节点,反转链表,合并多个链表等

Leetcode练习常见链表题目

数据结构之链表

# Definition for singly-linked list.

# class ListNode:

# def __init__(self, x):

# self.val = x

# self.next = None

class Solution:

def reverseList(self, head: ListNode) -> ListNode:

pre = None

cur = head

while cur:

nextnode = cur.next

cur.next = pre

pre = cur

cur = nextnode

ruture pre

数据结构之队列

队列(queue)是先进先出结构

如何使用python实现队列

实现队列的apend和pop操作,如何做到先做先出

使用python的list或者collections.deque实现队列

from collections import deque

class Queue:

def __init__(self):

self.items = deque()

def append(self, val):

retuen self.items.append(val)

def pop(self):

return self.items.popleft()

def empty(self):

return len(self.items) == 0

def test_queue():

q = Queue()

q.append(0)

q.append(1)

q.append(2)

print(q.pop())

print(q.pop())

print(q.pop())

test_queue()()

0

1

2

常考数据结构之栈

栈(stack)是后进先出结构

如何使用python实现栈?

实现栈的push 和 pop 操作, 如何做到后进先出

同样可以用python list 或者collections.deque实现栈

from collections import deque

class Stack(object):

def __init__(self):

self.deque = deque() # 或者用list

def push(self, value):

self.deque.append(value)

def pop(self):

return self.deque.pop()

一个常考问题: 如何用两个栈实现队列?

常考数据结构之字典与集合

python dict/set 底层都是哈希表

哈希表的实现原理,底层其实就是一个数组

根据哈希函数快速定位一个元素,平均查找,非常快

不断加入元素会引起哈希表重新开辟空间,拷贝之前元素到新数组

python数据结构与算法面试_python面试总结4(算法与内置数据结构)相关推荐

  1. python数据结构的列表_Python内置数据结构——列表list

    内置数据结构分类: 数值型 int , float , complex , bool 序列对象 字符串 str 列表 list tuple(元组) 键值对 集合 set 字典 dict 数字型int ...

  2. python内置数据结构教程_python课程第二周 内置数据结构——列表和元组

    5种内置数据结构:列表.元组.字典.集合.字符串.列表.字典.字符串三种被称为线性结构.针对线性结构的操作有:切片.封包和解包.成员运算符.迭代. 针对数据结构的操作有解析式:解析式分为列表解析.生成 ...

  3. python数据结构面试_python面试的3大重点,让你顺利拿到offer

    5月已经过去大半个月了,马上就要迎来毕业季了,你准备好去面试了么? W3C咨询了不少python爬虫岗位从业者,如果你也打算从事python爬虫岗位,掌握这三个重点,能让你更顺利的get到理想的off ...

  4. python的celery的面试_Python面试经验总结,面试一时爽,一直面试一直爽!

    前言:这是一位好友最近对Python岗位面试后的一篇经验之谈,从Python岗位需求到Python就业方向都有,很有借鉴意义 Python学习交流群:835017344,这里是python学习者聚集地 ...

  5. python内置数据结构教程第四版答案_Python数据结构--内置数据结构

    本文提到的所有内容均是基于Python 2.7,在Python 3.x的环境下可能并不完全适用 什么是数据结构 我们可以看一下在百度百科对于数据结构是怎么定义的: 数据结构是指相互之间存在着一种或多种 ...

  6. python 数据结构包括三方面_python数据结构

    python数据结构 背景 之所以选择这个话题,有两方面原因: 很多情况下,有些语句是看到别人这么用,自己就这么用,并不知道为什么要这么用 写了一段代码,很简洁很美观,跑起来比驴还慢 只有知道内部原理 ...

  7. Python程序设计与科学计算精录总结Episode.2 Python基础语法:函数、模块、内置数据结构、面向对象知识总结(基于Michael导师Python课程与VS2019)

    Jupyter Notebook是基于网页的用于交互计算的应用程序.其可被应用于全过程计算:开发.文档编写.运行代码和展示结果.这个名字就很讲究,Jupyter改自木星的英文单词Jupiter,其中包 ...

  8. python必刷面试_Python面试必刷题系列(5)

    本篇是[Python面试必刷题系列]的第5篇文章.通过收集.整理Python真实面试题,给大家讲解面试中的python高频考察点,希望能够引起读者的足够重视. 往期回顾: Python中 is 和 = ...

  9. python深浅拷贝 面试_Python面试宝典之基础篇-02

    原标题:Python面试宝典之基础篇-02 我觉得你如果正在找工作,我的Python面试宝典几期教程,你一定得花时间看完了! 题目006:说说Python中的浅拷贝和深拷贝. 点评:这个题目本身出现的 ...

最新文章

  1. matlab字母随机排列,matlab_一组数据元素随机排列
  2. 波形捕捉:(7)“捕捉缓冲区”特效
  3. 516%增长:微博如何熬过七年之痒?
  4. 百度地图手机和电脑不一致_如何解决电脑显色和印刷色不一致的问题
  5. ckeditor的使用实例
  6. java拦截器跳转页面跳转页面跳转_java Struts2 在拦截器里的跳转问题
  7. 统计学和python_深入浅出统计学系列python实现
  8. java启动tomcat9闪退
  9. SVG中中文字体的显示
  10. 架构师技术精华文章汇总
  11. 大学生计算机基础实验文库,大学计算机基础实验指导书(ecxel)
  12. 计算某个日期到今天的天数
  13. 使用DBeaver连接mysql报Access denied for user ‘test‘@‘%‘ to database
  14. Linux基本命令-权限、运维相关
  15. 谷歌经典bert模型从下载源码到运行成功
  16. python递推公式_线性代数求解递推形式数列的通项公式
  17. java 数字 百分比_Java 数字转换成百分比
  18. 【Android-Kotlin】匿名内部类与Lambda 表达式(附RecycleView监听)
  19. LaTex排版 正文间距(段行列间距)调整与表格调整(宽度, 合并, 表注)
  20. uoni扫地机器人好用吗_扫地机器人好用吗?扫盲选购看这篇

热门文章

  1. java 摄像头 win7_Win7系统下JAVA摄像头调用_实例代码介绍
  2. vue项目中使用postcss-px2rem的方法总结
  3. 「UG/NX」NX开发对应VS版本的环境配置
  4. Django插件Channels ——实现即时通信
  5. react 路由监听
  6. java中集合怎么定义_Java集合系列(一):集合的定义及分类
  7. 用汉字命名数据库字段名
  8. 附表和附注_会计报表附注是对会计报表附表的补充解释和说明。()
  9. 火车票多种订购系统猜想与优势讨论
  10. SkyWalking showcase部署报错“sh“: executable file not found in $PATH: unknown.