【python与数据结构】(leetcode算法预备知识)

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~

python与数据结构

  • Python 中常见的数据类型
  • 数据结构
    • 1.数组(Array)
    • 2.链表(Linked List)
    • 3.哈希表(Hash Table)
    • 4.队列(Queue)
      • list
      • deque(类似双端队列)
    • 5.栈(Stack)
      • list
      • deque
    • 6.堆(Heep)
    • 7.树(Tree)
  • 数据类型常见操作
    • 1.数字类型
    • 2.布尔类型
    • 3.字符串类型
    • 4.列表类型
    • 5.元组类型
    • 6.集合类型
    • 7.字典类型

Python 中常见的数据类型

1.数字类型:

  • 整数(int):表示整数值,例如 1、-5、100。
  • 浮点数(float):表示带有小数部分的数字,例如 3.14、-0.5、2.0。
  • 复数(complex):表示实部和虚部的复数,例如 2+3j。

2.布尔类型(bool):

  • 表示真(True)或假(False)的逻辑值。

3.字符串类型(str):

  • 表示文本数据,使用单引号或双引号括起来,例如 ‘Hello’、“World”。

4.列表类型(list):

  • 表示有序的可变序列,可以包含不同类型的元素,使用方括号括起来,例如 [1, 2, ‘a’, True]。

5.元组类型(tuple):

  • 类似于列表,但是不可变,使用圆括号括起来,例如 (1, 2, ‘a’, True)。

6.集合类型(set):

  • 表示无序且唯一的元素集合,使用花括号括起来,例如 {1, 2, 3}。

7.字典类型(dict):

  • 表示键值对的映射关系,使用花括号括起来,例如 {‘name’: ‘Alice’, ‘age’: 25}。

数据结构

1.数组(Array)

列表类型(list)

2.链表(Linked List)

在这里插入图片描述

class ListNode:def __init__(self,x):self.val = xself.next = None

3.哈希表(Hash Table)

字典类型(dict)

4.队列(Queue)

在这里插入图片描述

list

进队:append()

出队:pop(0)

l = [1,2,3,4,5]l.append(6)
l
#[1, 2, 3, 4, 5, 6]l.pop(0)
l
#[2, 3, 4, 5, 6]

deque(类似双端队列)

deque 是 Python 中的一个内置模块 collections 中的类,用于实现双端队列(double-ended queue)。双端队列是一种具有队列和栈特性的数据结构,支持在两端进行插入和删除操作。

deque 提供了以下常用操作:

  1. 创建双端队列:
    • 使用 deque() 函数创建一个空的双端队列。
    • 例如:from collections import dequed = deque()
  2. 在队列两端插入元素:
    • 使用 append(item) 在队列的右端插入一个元素。
    • 使用 appendleft(item) 在队列的左端插入一个元素。
    • 例如:d.append(1)d.appendleft(2)
  3. 在队列两端删除元素:
    • 使用 pop() 删除并返回队列右端的元素。
    • 使用 popleft() 删除并返回队列左端的元素。
    • 例如:d.pop()d.popleft()
  4. 访问队列两端的元素:
    • 使用 [-1] 索引访问队列右端的元素。
    • 使用 [0] 索引访问队列左端的元素。
    • 例如:d[-1]d[0]
  5. 获取队列长度:
    • 使用 len(d) 获取队列中的元素个数。
  6. 判断队列是否为空:
    • 使用 not dlen(d) == 0 判断队列是否为空。

deque 还支持其他一些方法,如旋转队列、计数元素出现次数、反转队列等。双端队列在实际应用中常用于需要高效地在两端进行插入和删除操作的场景,比如实现缓存、任务调度等。

右进:append()

右出:pop()

左进:appendleft()

左出:popleft()

from collections import deque
q = deque([1,2,3])q.append(4)
q
#deque([1, 2, 3, 4])q.pop()
q
#deque([1, 2, 3])q.appendleft(4)
q
#deque([4, 1, 2, 3])q.popleft()
q
#deque([1, 2, 3])

使用:先进后出

#使用方法1:队头<---   队列   <---队尾
#append()	队尾
#popleft()	队头from collections import deque
q = deque([1,2,3])q.append(4)
q
#deque([1, 2, 3, 4])q.popleft()
q
#deque([2, 3, 4])
#使用方法2:队尾--->   队列   --->队头
#appendleft()	队尾
#pop()	队头from collections import deque
q = deque([1,2,3])q.appendleft(4)
q
#deque([4, 1, 2, 3])q.pop()
q
#deque([4, 1, 2])

5.栈(Stack)

在这里插入图片描述

list

进栈:append()

出栈:pop()

l = [1,2,3,4,5]l.append(6)
l
#[1, 2, 3, 4, 5, 6]l.pop()
l
#[1, 2, 3, 4, 5]

deque

右进:append()

右出:pop()

左进:appendleft()

左出:popleft()

使用:先进先出,后进后出

6.堆(Heep)

在这里插入图片描述
heapq 是 Python 中的一个内置模块,提供了堆(heap)算法的实现。堆是一种特殊的树形数据结构,满足以下性质:

  • 堆是一棵完全二叉树;
  • 堆中的每个节点都必须大于等于(或小于等于)其子节点。

Python 中的 heapq 模块提供了以下常用函数:

  1. heapify(iterable)
    • 将一个可迭代对象转化为堆,时间复杂度为O*(*n)。
    • 例如:heapq.heapify([3, 1, 4, 1, 5, 9])
  2. heappush(heap, item)
    • 将一个元素加入堆中,时间复杂度为 O(logn)。
    • 例如:heapq.heappush([3, 1, 4, 1, 5, 9], 2)
  3. heappop(heap)
    • 弹出堆中最小的元素,时间复杂度为 O(logn)。
    • 例如:heapq.heappop([1, 1, 3, 4, 5, 9])
  4. heapreplace(heap, item)
    • 弹出堆中最小的元素,并将新元素加入堆中,时间复杂度为 O*(*logn)。
    • 例如:heapq.heapreplace([1, 1, 3, 4, 5, 9], 2)
  5. nlargest(n, iterable[, key])
    • 返回可迭代对象中最大的 n 个元素,时间复杂度为 O*(*nlogk),其中 k=min(n,len(iterable))。
    • 例如:heapq.nlargest(3, [1, 2, 3, 4, 5, 6, 7, 8, 9])
  6. nsmallest(n, iterable[, key])
    • 返回可迭代对象中最小的 n 个元素,时间复杂度为 O*(*nlogk),其中 k=min(n,len(iterable))。
    • 例如:heapq.nsmallest(3, [9, 8, 7, 6, 5, 4, 3, 2, 1])

heapq 模块可以用于实现堆排序、优先队列等算法,同时也可以用于解决一些常见的算法问题,如求 top-k 问题、求中位数等。在使用 heapq 模块时,需要注意元素的比较方式,可以通过传递 key 参数来指定比较函数。

from heapq import * a = [1,2,3,4,5]
heapify(a)
a
#[1, 2, 3, 4, 5]heappush(a,-1)
a
#[-1, 2, 1, 4, 5, 3]heappop(a)
a
#[1, 2, 3, 4, 5]nlargest(3,a)
#[5, 4, 3]nsmallest(3,a)
#[1, 2, 3]

7.树(Tree)

在这里插入图片描述

数据类型常见操作

1.数字类型

  • abs():绝对值
  • max()/min():最大值/最小值
  • pow(x,y):xy
  • sqrt(x):根号x
abs(-5)
#5max(1,3,6)
#6min(1,-1,4)
#-1pow(3,3)
#27import math
math.sqrt(9)
#3.0

2.布尔类型

bool(0)
#Falsebool(2)
#Truebool(-1)
#True

3.字符串类型

  • len(s):字符串长度,空格也算
  • max(s):最大字符
  • max(s):最小字符
  • s.count(‘H’):统计H的个数
  • s.isupper():是否为大写
  • s.islower():是否为小写
  • s.isdigit():是否为数字
  • s.lower():转换为小写
  • s.upper():转换为大写
  • s.swapcase():大小写转换
  • s.split():分割字符串
s="Hello world"len(s)
#11max(s)
#'w's.count("l")
#3s.isupper()
#Falses.islower()
#Falses.isdigit()
#Falses.lower()
#'hello world's.upper()
#'HELLO WORLD's.swapcase()
#'hELLO WORLD's.split()
#['Hello', 'world']
  • s.strip():去除两边字符串
  • s.lstrip():去除左边字符串
  • s.rstrip():去除右边字符串
  • s.replace():交换字符串。

注意:strip()不能去除字符串中间的空格,去除中间空格用replace()

a='   hello world   '
a.strip()
#'hello world'a.lstrip()
#'hello world   'a.rstrip()
#'   hello world'a.replace(' ','')
#'helloworld'

4.列表类型

a = [1,54,2,22,4]
  • 增加
    • a.append(元素)
    • a.insert(位置,元素)
a.append(25)
a
#[1, 54, 2, 22, 4, 25]a.insert(0,2)
a
#[2, 1, 54, 2, 22, 4, 25]
  • 更新
    • a[位置]=元素
a[0]=3
a
#[3, 1, 54, 2, 22, 4, 25]
  • 删除
    • a.pop(位置) 默认最后元素
    • a.remove(元素)
a.pop()
#25a.remove(3)
a
#[1, 54, 2, 22, 4]
  • 遍历

    • for x in a:

      ​ print(x)

    • for i in range(len(a)):

      ​ print(a[i])

    • b=[x**2 for x in a]:

      ​ print(x)

for x in a:print(x)
'''
1
54
2
22
4
'''for i in range(len(a)):print(a[i])
'''
1
54
2
22
4
'''b=[x**2 for x in a]
b
#[1, 2916, 4, 484, 16]
  • len(l):列表长度
  • max(l):最大元素,列表为同一类型
  • max(l):最小元素,列表为同一类型
  • l.reverse():翻转
  • l.sort(reverse = True) :降序排序
  • in:元素是否再列表
  • 切片
  • l.clear():清空列表
l=[1,2,3,4,5,6]
len(l)
#6max(l)
#6min(l)
#1l.reverse()
l
#[6, 5, 4, 3, 2, 1]l.sort(reverse = False) #降序
l
#[1, 2, 3, 4, 5, 6]4 in l
#Truel[0:2]
#[1, 2]l.clear()
l
#[]

5.元组类型

a=(1,1.5,'abc')
  • 查找
a[0]
#1a[2]
#'abc'
  • len(a)
  • in
  • 切片
len(a)
#31 in a
#Truea[0:2]
#(1, 1.5)

6.集合类型

  • 增加
    • a.add()
    • a.update()
  • 删除
    • a.remove()
a={1,1.5,'abc'}
a.add(2)
a
#{1, 1.5, 2, 'abc'}a.update({4,5})
a
#{1, 1.5, 2, 4, 5, 'abc'}a.remove(1.5)
a
#{1, 2, 4, 5, 'abc'}
  • in
  • 集合间的操作
    • a-b:a有b没有
    • a|b:a有或b有
    • a&b:a、b都有
    • a^b:a、b不同时有
a={1,2,3}
b={3,4,5}a-b
#{1, 2}a|b
#{1, 2, 3, 4, 5}a&b
#{3}a^b
#{1, 2, 4, 5}

7.字典类型

  • 增/改
    • dict[key]=value
    • dict.pop(key)
  • in
    • key in dict
s = {'age':18,'name':'小明'}s['age']=19
s
#{'age': 19, 'name': '小明'}s['city']='长沙'
s
#{'age': 19, 'name': '小明', 'city': '长沙'}s.pop('city')
s
#{'age': 19, 'name': '小明'}'age' in s
#True
  • 遍历
    • key
    • value
    • k,v
for key in s:print(key)
#age
#namefor value in s.values():print(value)
#19
#小明for k,v in s.items():print(k,v)
#age 19
#name 小明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/172752.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postman的高级使用,傻瓜式学习【下】

目录 前言 1、全局变量、环境变量 1.1、概念&#xff1a; 1.2、如何设置全局变量、环境变量 1.3、获取全局变量、环境变量 1.4、案例1&#xff1a;手动设置变量&#xff0c;请求参数获取 1.5、案例2&#xff1a;代码设置变量&#xff0c;代码获取变量 2、Postman读取外部…

Android开发知识学习——HTTP基础

文章目录 学习资源来自&#xff1a;扔物线HTTPHTTP到底是什么HTTP的工作方式URL ->HTTP报文List itemHTTP的工作方式请求报文格式&#xff1a;Request响应报文格式&#xff1a;ResponseHTTP的请求方法状态码 HeaderHostContent-TypeContent-LengthTransfer: chunked (分块传…

[微信小程序踩坑]微信小程序editor富文本组件渲染字符串时,内部图片超出大小导致无法正常渲染或回显(数据传输长度为 3458 KB,存在有性能问题!)

坑一&#xff1a;回显问题 富文本组件&#xff1a; <editor id"editor" name"{{name}}" style"font-size: 28rpx;color: #C9CDD4" read-only"{{true}}" placeholder"{{placeholder}}" bind:input"onChange11"…

kaggle新赛:AI Village夺旗赛挑战

赛题名称&#xff1a;AI Village Capture the Flag DEFCON31 赛题链接&#xff1a;https://www.kaggle.com/competitions/ai-village-capture-the-flag-defcon31 赛题背景 夺旗赛这款广受欢迎的竞技游戏&#xff0c;不仅可以在户外进行。数字夺旗赛指的是一系列需要参赛者利…

Django 全局配置 settings 详解

文章目录 1 概述1.1 Django 目录结构 2 常用配置&#xff1a;settings.py2.1 注册 APP&#xff1a;INSTALLED_APPS2.2 模板路径&#xff1a;TEMPLATES2.3 静态文件&#xff1a;STATICFILES_DIRS2.4 数据库&#xff1a;DATABASES2.5 允许访问的主机&#xff1a;ALLOWED_HOSTS 1 …

AI与Prompt:解锁软件开发团队的魔法咒语,在复杂任务上生成正确率更高的代码

AI与Prompt&#xff1a;解锁软件开发团队的魔法咒语 写在最前面论文&#xff1a;基于ChatGPT的自协作代码生成将团队协作理论应用于代码生成的研究自协作框架原理1、DOL任务分配2、共享黑板协作3、Instance实例化 案例说明简单任务&#xff1a;基本操作&#xff0c;生成的结果1…

Linux系统下DHCP服务安装部署和使用实例详解(蜜罐)

目录 一、概述 二、具体配置如下&#xff1a; 一、概述 DHCP &#xff1a;动态主机设置协议&#xff08;英语&#xff1a;Dynamic Host Configuration Protocol&#xff0c;DHCP&#xff09;是一个局域网的网络协议&#xff0c;使用UDP协议工作&#xff0c;主要有两个用途&…

sql-50练习题0-5

sql练习题0-5题 前言数据库表结构介绍学生表课程表成绩表教师表 0-1 查询"01"课程比"02"课程成绩高的学生的信息及课程分数0-2查询"01"课程比"02"课程成绩小的学生的信息及课程分数0-3查询平均成绩大于等于60分的同学的学生编号和学生…

父子项目打包发布至私仓库

父子项目打包发布至私仓库 1、方法一 在不需要发布至私仓的模块上添加如下代码&#xff1a; <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-deploy-plugin</artifactId><configuration><skip>true</s…

基于OFDM的通信系统模拟实现

文章目录 前言一、OFDM 基本知识1、OFDM 理论知识及仿真2、OFDM 调制3、OFDM 解调 二、2ASK&#xff08;二进制振幅键控&#xff09;1、2ASK 基本原理①、OOK②、2ASK 2、2ASK/OOK 信号产生方法3、2ASK/OOK 信号解调方法 三、基于 OFDM 的通信系统模拟实现1、整体流程2、MATLAB…

基于nodejs+vue食力派网上订餐系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

行情分析——加密货币市场大盘走势(10.27)

目前大饼开始了震荡盘整&#xff0c;目前远离EMA21均线&#xff0c;预计会有大的回调动作。而MACD日线来看&#xff0c;昨日和今日开始呈现绿色空心柱&#xff0c;也在说明大饼在做震荡盘整。不排除大跌的可能性&#xff0c;大饼可以开始布局中长线空单&#xff0c;可以再35000…

【NLP】word复制指定内容到新的word文档

目录 1.python代码 2.结果 需求&#xff1a; 复制word文档里的两个关键字&#xff08;例如“起始位置”到“结束位置”&#xff09;之间的内容到新的word文档。 前提&#xff1a;安装win32包&#xff0c;通过pip install pywin32命令直接安装。话不多说&#xff0c;直接上代码…

苹果cms模板MXone V10.7魔改版源码 全开源

苹果cms模板MXone V10.7魔改版源码 全开源 苹果cms模板MXone魔改版短视大气海报样式 安装模板教程说明&#xff1a; 1、将模板压缩包上传到苹果CMS程序/template下解压 2、网站模板选择mxone 模板目录填写html 3、网站模板选择好之后一定要先访问前台&#xff0c;然后再进…

面试准备中........

一、Linux 计算机网络相关&#xff1a; 1.OSI七层模型 应用层 &#xff1a;给用户提供操作界面 表示层&#xff1a;数据的表示&#xff1a;将字符转化为2进制或将2进制转化为字符。加密&#xff1a;对称加密和非对称加密&#xff0c;ssh协议。压缩&#xff1a;将文件压缩。…

No authorization token was found

今天遇到了一个问题&#xff0c;我把前后端逻辑都理了一遍&#xff0c;开始怀疑后端&#xff0c;后端肯定没错了&#xff0c;把前端理了一遍&#xff0c;ok前后端没错&#xff0c;我错。登录哪里需要的token&#xff1f;&#xff1f;&#xff1f;&#xff1f;把我搞懵逼了。 测…

代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间

LeetCode T435 无重叠区间 题目链接:435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 这题思路和昨天的打气球类似,我们需要按照左区间或者右区间进行排序,然后哦判断第i个区间的左端点和第i-1个区间的右端点的大小关系,,如果大于等于,那么就无需操作,一旦…

Fabric.js 复制粘贴元素

本文简介 点赞 关注 收藏 学会了 当你要复制一个 fabric 的元素时&#xff0c;你考虑到的是什么&#xff1f;是深拷贝当前选中对象再添加到画布中&#xff1f; 其实&#xff0c;fabric.js 提供了一个克隆方法&#xff0c;在 fabric.js 官网的案例里也有这个demo&#xff1a…

中文编程开发语言工具系统化教程零基础入门篇和初级1专辑课程已经上线,可以进入轻松学编程

中文编程开发语言工具系统化教程零基础入门篇和初级1专辑课程已经上线&#xff0c;可以进入轻松学编程 学习编程捷径&#xff1a;&#xff08;不论是正在学习编程的大学生&#xff0c;还是IT人士或者是编程爱好者&#xff0c;在学习编程的过程中用正确的学习方法 可以达到事半…

Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(上)

Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart语言吉祥物Dash&#xff08;上&#xff09; 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://…