python数据结构与算法面试_python面试总结4(算法与内置数据结构)
算法与内置数据结构
常用算法和数据结构
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(算法与内置数据结构)相关推荐
- python数据结构的列表_Python内置数据结构——列表list
内置数据结构分类: 数值型 int , float , complex , bool 序列对象 字符串 str 列表 list tuple(元组) 键值对 集合 set 字典 dict 数字型int ...
- python内置数据结构教程_python课程第二周 内置数据结构——列表和元组
5种内置数据结构:列表.元组.字典.集合.字符串.列表.字典.字符串三种被称为线性结构.针对线性结构的操作有:切片.封包和解包.成员运算符.迭代. 针对数据结构的操作有解析式:解析式分为列表解析.生成 ...
- python数据结构面试_python面试的3大重点,让你顺利拿到offer
5月已经过去大半个月了,马上就要迎来毕业季了,你准备好去面试了么? W3C咨询了不少python爬虫岗位从业者,如果你也打算从事python爬虫岗位,掌握这三个重点,能让你更顺利的get到理想的off ...
- python的celery的面试_Python面试经验总结,面试一时爽,一直面试一直爽!
前言:这是一位好友最近对Python岗位面试后的一篇经验之谈,从Python岗位需求到Python就业方向都有,很有借鉴意义 Python学习交流群:835017344,这里是python学习者聚集地 ...
- python内置数据结构教程第四版答案_Python数据结构--内置数据结构
本文提到的所有内容均是基于Python 2.7,在Python 3.x的环境下可能并不完全适用 什么是数据结构 我们可以看一下在百度百科对于数据结构是怎么定义的: 数据结构是指相互之间存在着一种或多种 ...
- python 数据结构包括三方面_python数据结构
python数据结构 背景 之所以选择这个话题,有两方面原因: 很多情况下,有些语句是看到别人这么用,自己就这么用,并不知道为什么要这么用 写了一段代码,很简洁很美观,跑起来比驴还慢 只有知道内部原理 ...
- Python程序设计与科学计算精录总结Episode.2 Python基础语法:函数、模块、内置数据结构、面向对象知识总结(基于Michael导师Python课程与VS2019)
Jupyter Notebook是基于网页的用于交互计算的应用程序.其可被应用于全过程计算:开发.文档编写.运行代码和展示结果.这个名字就很讲究,Jupyter改自木星的英文单词Jupiter,其中包 ...
- python必刷面试_Python面试必刷题系列(5)
本篇是[Python面试必刷题系列]的第5篇文章.通过收集.整理Python真实面试题,给大家讲解面试中的python高频考察点,希望能够引起读者的足够重视. 往期回顾: Python中 is 和 = ...
- python深浅拷贝 面试_Python面试宝典之基础篇-02
原标题:Python面试宝典之基础篇-02 我觉得你如果正在找工作,我的Python面试宝典几期教程,你一定得花时间看完了! 题目006:说说Python中的浅拷贝和深拷贝. 点评:这个题目本身出现的 ...
最新文章
- matlab字母随机排列,matlab_一组数据元素随机排列
- 波形捕捉:(7)“捕捉缓冲区”特效
- 516%增长:微博如何熬过七年之痒?
- 百度地图手机和电脑不一致_如何解决电脑显色和印刷色不一致的问题
- ckeditor的使用实例
- java拦截器跳转页面跳转页面跳转_java Struts2 在拦截器里的跳转问题
- 统计学和python_深入浅出统计学系列python实现
- java启动tomcat9闪退
- SVG中中文字体的显示
- 架构师技术精华文章汇总
- 大学生计算机基础实验文库,大学计算机基础实验指导书(ecxel)
- 计算某个日期到今天的天数
- 使用DBeaver连接mysql报Access denied for user ‘test‘@‘%‘ to database
- Linux基本命令-权限、运维相关
- 谷歌经典bert模型从下载源码到运行成功
- python递推公式_线性代数求解递推形式数列的通项公式
- java 数字 百分比_Java 数字转换成百分比
- 【Android-Kotlin】匿名内部类与Lambda 表达式(附RecycleView监听)
- LaTex排版 正文间距(段行列间距)调整与表格调整(宽度, 合并, 表注)
- uoni扫地机器人好用吗_扫地机器人好用吗?扫盲选购看这篇
热门文章
- java 摄像头 win7_Win7系统下JAVA摄像头调用_实例代码介绍
- vue项目中使用postcss-px2rem的方法总结
- 「UG/NX」NX开发对应VS版本的环境配置
- Django插件Channels ——实现即时通信
- react 路由监听
- java中集合怎么定义_Java集合系列(一):集合的定义及分类
- 用汉字命名数据库字段名
- 附表和附注_会计报表附注是对会计报表附表的补充解释和说明。()
- 火车票多种订购系统猜想与优势讨论
- SkyWalking showcase部署报错“sh“: executable file not found in $PATH: unknown.