LeetCode刷题笔记 --- python

2023-05-16

目录

  • 一、python交换两个变量的值
    • 1.1 使用tuple
    • 1.2 使用临时变量temp
  • 二、python中‘/’和‘//’区别
  • 三、python列表的使用
    • 3.1 列表的基本操作
    • 3.2 列表实现栈操作
    • 3.3 列表实现排序
    • 3.4 列表的算法效率
  • 四、python字典
    • 4.1 python字典的使用
    • 4.2 检查字典中是否存在键和值
    • 4.3 字典中的get()方法
    • 4.4 字典中的setdefault()方法
    • 4.5 删除字典元素
  • 五、python实现三目运算符(if else 在同一行)
  • 六、python修改字符串的方法
  • 七、python 双向队列(deque)
    • 7.1 常用方法
    • 7.2 时间复杂度:
    • 7.3 相关代码案例:
  • 八、python中的最大值和最小值
  • 九、python经典报错
    • 9.1 UnboundLocalError: local variable 'xxx' referenced before assignment
  • 十、python中集合set的使用详解
    • 10.1 set的作用
    • 10.1 set的初始化
    • 10.2 set集合的增删改查操作
    • 10.3 常见使用注意事项

一、python交换两个变量的值

1.1 使用tuple

x,y = y,x
print(x)
print(y)

说明:y,x 的返回值是一个tuple,所以变换变量可以看做把一个tuple的值赋值给另一个tuple

1.2 使用临时变量temp

x = 1
y = 2
temp = x
x = y
y = temp
print(x)
print(y)

二、python中‘/’和‘//’区别

python中‘/’表示浮点数除法,返回浮点结果

6 / 4 =1.5

python中 ‘//’表示整数除法,返回不大于结果的一个最大的整数

  6 // 4 = 1

三、python列表的使用

3.1 列表的基本操作

list2 = ["a", "b", "c", "d"] # 定义列表
l = list() # 新建空列表
l.append(1) # 添加元素
l.append(2)
l.append(3)
l.append(4)
# l.insert(index, obj) 将指定对象插入列表的指定位置
l.insert(0,"first") # 在位置为0的地方插入字符串"first"
# 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
l.extend([6,7]) 
# 统计某个元素在列表中出现的次数
l.count(obj)
del l[2] # 删除元素
l[0] # 查看元素
l[1:3] # 查看元素

3.2 列表实现栈操作

使用列表的pop()方法 可以把列表当做栈使用

# 出栈
l.pop([index=-1]) # 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
# 进栈
l.append() 
# 查看栈顶 即查看列表中的最后一个元素
l[-1]

3.3 列表实现排序

list.sort(cmp=None, key=None, reverse=False)

参数说明:

  • cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
  • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
aList = ['123', 'Google', 'Runoob', 'Taobao', 'Facebook'];
 
aList.sort();
print("List : ")
print(aList)
# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]
 
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
 
# 指定第二个元素排序
random.sort(key=takeSecond)
# 上面sort语句也可以使用lambda表达式的方式实现
# random.sort(key=lambda x:x[1])
# 输出类别
print('排序列表:')
print(random)

3.4 列表的算法效率

列表的算法效率
可以采用时间复杂度来衡量:
index() O(1)
append O(1)
pop() O(1)
pop(i) O(n)
insert(i,item) O(n)
del operator O(n)
iteration O(n)
contains(in) O(n)
get slice[x:y] O(k)
del slice O(n)
set slice O(n+k)
reverse O(n)
concatenate O(k)
sort O(nlogn)
multiply O(nk)

O括号里面的值越大代表效率越低

四、python字典

4.1 python字典的使用

d = {}  # 新建空字典
# d = dict() # 新建空字典
d[1] = 2 # 添加元素
d[3] = 4
d.update({'a':'b','c':'d'}) # 添加元素
print(d)

output:

{1: 2, 3: 4, 'a': 'b', 'c': 'd'}

4.2 检查字典中是否存在键和值

data in dict.keys()
data in dict.values()
data in dict 等价于 data in dict.keys()
如果要检查一个值是否为字典中的键,就可以将关键字in (not in)作用于该字典本身

4.3 字典中的get()方法

在访问一个键的值之前,检查该键是否存在于字典中,这很麻烦。
dict.get()方法有两个参数,分别为键和键不存在时返回的备用值

dict.get('key',deafaultValue)

4.4 字典中的setdefault()方法

当键不存在时增加一个键并设置一个默认值返回该默认值
当键存在时直接返回键的值

spam = {'name': 'hjy', 'age': 5}
print(spam.setdefault('color', 'black'))
print(spam)
print(spam.setdefault('name', 'zhangsan'))
print(spam)
black
{'name': 'hjy', 'age': 5, 'color': 'black'}
hjy
{'name': 'hjy', 'age': 5, 'color': 'black'}

4.5 删除字典元素

能删单一的元素也能清空字典,清空只需一项操作。
显示删除一个字典用del命令,如下实例:

tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
 
del tinydict['Name']  # 删除键是'Name'的条目
tinydict.clear()      # 清空字典所有条目
del tinydict          # 删除字典
 
print "tinydict['Age']: ", tinydict['Age'] 
print "tinydict['School']: ", tinydict['School']

output:

tinydict['Age']: 
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    print "tinydict['Age']: ", tinydict['Age'] 
NameError: name 'tinydict' is not defined

五、python实现三目运算符(if else 在同一行)

c语言版本:条件?a:b【解释:如果条件为真,则结果为a 否则,结果为b】
python实现三目运算符
在这里插入图片描述
上图可以看出,python实现了和三目运算符差不多的功效,方法是if else 在同一行。

六、python修改字符串的方法

在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符。
如果字符串类型修改值会报错(如下)
错误 TypeError: ‘str’ object does not support item assignment
翻译:TypeError:“unicode”对象不支持项分配
因此改变一个字符串的元素需要新建一个新的字符串。
将字符串转换成列表后修改值,然后用join组成新字符串

>>> s='abcdef'                  #原字符串
>>> s1=list(s)                  #将字符串转换为列表
>>> s1                         
['a', 'b', 'c', 'd', 'e', 'f']  #列表的每一个元素为一个字符
>>> s1[4]='E'                   #将列表中的第5个字符修改为E
>>> s1[5]='F'                   #将列表中的第5个字符修改为E
>>> s1
['a', 'b', 'c', 'd', 'E', 'F']  
>>> s=''.join(s1)               #用空串将列表中的所有字符重新连接为字符串
>>> s
'abcdEF'                        #新字符串

七、python 双向队列(deque)

deque (double-ended queue,双向队列)是以双向链表的形式实现的 (Well, a list of arrays rather than objects, for greater efficiency)。双向队列的两端都是可达的,但从查找队列中间的元素较为缓慢,增删元素就更慢了,deque属于高性能的数据结构之一。

7.1 常用方法

  • append 队列右边添加元素
  • appendleft 队列左边添加元素
  • clear 清空队列中的所有元素
  • count 返回队列中包含value的个数
  • extend 队列右边扩展,可以是列表、元组或字典,如果是字典则将字典的key加入到deque
  • extendleft 同extend,在左边扩展
  • pop 移除并返回队列右边的元素
  • popleft 移除并返回队列左边的元素
  • remove(value) 移除队列第一个出现的元素 reverse 队列的所有元素进行反转
  • rotate(n) 对队列数进行移动
  • len(队列名) 获取队列长度

7.2 时间复杂度:

在这里插入图片描述

7.3 相关代码案例:

from collections import deque
que = deque()
que.append(1)
que.append(2)
que.appendleft(3)
len(que)
import collections
que = collections.deque([1,3,4]) # 初始化

八、python中的最大值和最小值

应用场景
有时候需要初始化一些变量,让其表示一个尽可能大的值或者尽可能小的值。
代码在这里插入代码片

max_value = float('inf')
min_value = float('-inf')

九、python经典报错

9.1 UnboundLocalError: local variable ‘xxx’ referenced before assignment

  • 翻译 :赋值前引用的局部变量
  • 修改:根据实际需求可以把’xxx’修改成全局变量,如:变量path改为变量self.path

十、python中集合set的使用详解

在python3中按数据类型的可变与不可变大致分为如下几种类型。

  • 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

10.1 set的作用

  • python中,用set来表示一个无序不重复元素的序列。set的只要作用就是用来给数据去重。
  • 可以使用大括号 { } 或者 set() 函数创建集合,但是注意如果创建一个空集合必须用 set() 而不是 {},因为{}是用来表示空字典类型的

10.1 set的初始化

s = set() # 空set的初始化
print(type(s)) 

s = {}    # 空字典的初始化
print(type(s))
d1 = {'x': 1, 'y': 2} # 非空字典的初始化
print(d1['x'])

person ={"student","teacher","babe",123,321,123} #同样各种类型嵌套,可以赋值重复数据,但是存储会去重
print(type(person))
print(len(person))  #存放了6个数据,长度显示是5,存储是自动去重.
print(person) #但是显示出来则是去重的

output:

<class 'set'>
<class 'dict'>
<class 'set'>
5
{321, 'student', 'babe', 'teacher', 123}

10.2 set集合的增删改查操作

#1.给set集合增加数据
person ={"student","teacher","babe",123,321,123}
person.add("student") #如果元素已经存在,则不报错,也不会添加,不会将字符串拆分成多个元素,去别update
print(person)
person.add((1,23,"hello")) #可以添加元组,但不能是list
print(person)
'''
{321, 'babe', 'teacher', 'student', 123}
{(1, 23, 'hello'), 321, 'babe', 'teacher', 'student', 123}
'''
 
person.update((1,3)) #可以使用update添加一些元组列表,字典等。但不能是字符串,否则会拆分
print(person)
person.update("abc")
print(person)  #会将字符串拆分成a,b,c三个元素
'''
{321, 1, 3, 'teacher', (1, 23, 'hello'), 'babe', 'student', 123}
{321, 1, 3, 'b', 'c', 'teacher', (1, 23, 'hello'), 'a', 'babe', 'student', 123}
'''
 
#2.从set里删除数据
person.remove("student")#按元素去删除
print(person)
#print("student")如果不存在 ,会报错。
'''
{321, 1, 3, 'c', 'b', (1, 23, 'hello'), 'teacher', 'babe', 'a', 123}
'''
person.discard("student")#功能和remove一样,好处是没有的话,不会报错
person.pop() #在list里默认删除最后一个,在set里随机删除一个。
print(person)
'''
{1, 3, (1, 23, 'hello'), 'teacher', 'b', 'a', 'babe', 123, 'c'}
'''
#3.更新set中某个元素,因为是无序的,所以不能用角标
#所以一般更新都是使用remove,然后在add
 
#4.查询是否存在,无法返回索引,使用in判断
if "teacher" in person:
    print("true")
else:
    print("不存在")
'''
true
'''
#5.终极大招:直接清空set
print(person)
person.clear()
print(person)
'''
set()
'''

10.3 常见使用注意事项

#1.set对字符串也会去重,因为字符串属于序列。
str1 = set("abcdefgabcdefghi")
str2 = set("abcdefgabcdefgh")
print(str1,str2)
print(str1 - str2) #-号可以求差集
print(str2-str1)  #空值
#print(str1+str2)  #set里不能使用+号
====================================================================
{'d', 'i', 'e', 'f', 'a', 'g', 'b', 'h', 'c'} {'d', 'e', 'f', 'a', 'g', 'b', 'h', 'c'}
{'i'}
set()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode刷题笔记 --- python 的相关文章

  • C++泛型编程,标准模板库(STL)

    C 43 43 的特点就是添加了面向对象和泛型 面向对象是用类实现的 xff0c 泛型是用模板实现的 xff0c C 43 43 的标准模板库 STL 是泛型一个实例 xff0c 已经被集成到C 43 43 xff0c STL是一些常用的数
  • [工程编写]CMakeLists.txt 如何编写

    最近开始写一些SLAM工程 xff0c 所以对涉及到的内容做一些整理 xff0c 那么要做的第一件事情就是编写一个CMakeLists txt 本文那任乾大佬在知乎关于雷达自动驾驶SLAM的工程距离 1 信息指定 cmake版本确定 xff
  • 在执行 pip install 时遇到错误: ERROR: Complete output from command python setup.py egg_info:

    在执行 pip install 时遇到错误 xff1a pip install U docker compose ERROR Complete output from command python setup py egg info ERR
  • 树莓派登录问题

    在使用树莓派的过程中 xff0c 多次遇到了开机后输入正确密码却被重复多次要求输入的情况 xff0c 在查看他人经验后 xff0c 总结出以下两种情况及可行的方法 不确定密码是否正确 参考博客 纸末 树莓派忘记密码的解决方法 1 xff0c
  • 什么是SDK和API?

    SDK xff1a 在搭建环境的时候知道的sdk xff0c 但并不知道有什么用 SDK Software Development Kit 翻译成中文就是 34 软体开发工具组 34 是用来帮一个 产品 或 平台 开发应用程式的工具组 xf
  • 华为开发者大会总结——个人总结

    方舟编译器 xff08 开源 xff09 xff1a 干掉Java虚拟机 将java代码直接编译成机器码 xff0c 静态语义好编译 xff0c 核心是静态编译出动态语义 xff08 通过华为编译实验室的核心专利 xff09 xff0c 代
  • LoRa关键参数 1、扩频因子(SF) 2、编码率(CR) 3、信号带宽(BW) 4、LoRa信号带宽BW、符号速率Rs和数据速率DR的关系 5、

    LoRa 学习 xff1a LoRa 关键参数 xff08 扩频因子 xff0c 编码率 xff0c 带宽 xff09 的设定及解释 1 扩频因子 xff08 SF xff09 2 编码率 xff08 CR xff09 3 信号带宽 xff
  • MarkDown的语法

    使用MarkDoown时应该注意些什么呢 目录 一 添加标题 二 引用代码块 三 嵌入图片 1 本地图片 2 互联网图片 四 快捷键使用 五 分界线的使用 一 添加标题 在文字前加入相应数量的 一级标题 二级标题 三级标题 四级标题 五级标
  • python试爬李毅吧贴子标题,爬虫最初级

    注 xff1a 以下所有python代码均运行于2 7 0 最近想抓点数据存起来 xff0c 开始捣鼓python 爬虫技术以前没接触过 xff0c 这一回就当练手 xff0c 从零开始 xff0c 从最原始的方式开始 先定个小目标 xff
  • Activity的生命周期

    图来自百度百科 onCreate 启动activity时被调用 xff0c 用于进行初始化操作 xff08 加载布局 绑定事件等 xff09 xff0c 不应在onCreate 中做过多的不必要操作 xff0c 避免造成打开activity
  • Activity的启动模式

    以下为读书笔记 xff1a 实际项目中 xff0c 我们要通过特定的需求 xff0c 为每个活动指定恰当的启动模式 Android一共有4种启动模式 xff1a standard singleTop singleTask singleIns
  • PID参数 Ziegler-Nichols基于时域响应曲线的整定 反应曲线法

    PID控制器是工业过程控制中广泛采用的一种控制器 xff0c 其中 xff0c P I D分别为比例 xff08 Proportion xff09 积分 xff08 Integral xff09 微分 xff08 Differential
  • 郑学坚《微型计算机原理及应用》考点精讲 36讲

    链接 xff1a https pan baidu com s 12 vGBRrjOd UtO8P4e9bow 提取码 xff1a tqmp 当初考研时买的网课 xff0c 现在也用不着了 xff0c 赠与有缘人 书籍记录着别人多年时光总结出
  • 几种常用排序算法

    排序算法代码如下 xff1a void Sort Algorithm Bubble Sort int amp nums const int len bool haschange 61 true for int i 61 0 i lt len
  • 四旋翼姿态解算

    代码思路如下 xff1a 姿态解算 void IMU update float dT imu state st state float gyr VEC XYZ s32 acc VEC XYZ s16 mag val VEC XYZ imu
  • 树莓派4B-基于MCP2515的CAN通信过程记录篇

    本文主要记录使用树莓派4B xff0c 通过外接MCP2515模块来实现CAN通信 xff0c 使用基于Can utils实现CAN消息的收发 准备工作 xff1a 树莓派MCP2515模块杜邦线若干 知乎上一篇较为详细的参考 xff0c
  • nuxt踩坑集

    目录结构 assets 资源文件 用于组织未编译的静态资源如 LESS SASS或 JavaScript components 组件 layouts page 模板页面 xff0c 默认为 default vue可以在这个目录下创建全局页面
  • 记录个人在安装D435i驱动时出现的问题及解决方案

    目录 1 驱动安装 xff1a 2 启动Intel RealSense Viewer后报错No Frames Recevied 3 Record时报错Error opening file 1 驱动安装 xff1a 参考这篇博客 xff1a
  • 深度学习常见的优化算法

    文章目录 1 梯度下降算法 xff08 batch gradient descent BGD 2 随机梯度下降法 xff08 Stochastic gradient descent SGD 3 小批量梯度下降 Mini batch grad
  • vscode如何链接github

    1 首先安装配置好vscode xff1a https code visualstudio com download 然后下载git xff1a https git scm com download 根据自己的电脑选择相应的版本的下载就好了

随机推荐

  • 串口(uart)开发流程

    UART概述 UART全称 xff0c Universal Asynchronous Receiver and Transmitter UART xff0c 一般是每个单片机或开发板必备的一个功能模块 xff0c 可以用来调试 xff0c
  • *33.硬中断和软中断是什么?区别?

    1 硬中断 硬件中断 像磁盘 xff0c 网卡 xff0c 键盘 xff0c 时钟等 2 软中断 软件中断 进程产生 区别 xff1a xff08 产生机制 处理顺序 可否屏蔽 中断信号由来 xff09 1 软中断的发生的时间是由程序控制的
  • gazebo学习时遇到的问题(PX4篇)

    最近在研究如何使用UAV xff0c 由于是初学者 xff0c 不好直接上手实体无人机 xff0c 因此考虑通过在gazebo中模拟的方式进行一下无人机的简单使用模拟 xff0c 于是了解到了PX4这个东西 xff0c 他不仅支持固件写入
  • 阿里云服务器的搭建和部署(小白教程)

    阿里云服务器的搭建和部署 xff08 小白教程 xff09 一 购买服务器二 管理云服务器三 环境配置1 JDK的配置与下载2 tomcat的配置与下载3 MySQL的安装与配置 四 外网访问服务器 个人推荐阿里云 因为里面有一个大学生的云
  • 一篇带你搞懂Python3 中的 def __init__

    在学习python 100 days时 xff0c 在面向对象编程基础的那一块 xff0c 封装一个class时 xff0c 突然出现def init 的方法 xff0c 刚开始时 xff0c 对他的理解很模糊 xff0c 为什么定义一个类
  • 时间序列异常检测综述

    1 Introduction 时序异常检测几个可以运用的点 xff1a 1 欺诈检测 2 工业数据检测 简介一下 xff1a 异常检测很久之前就有了 最早可以追溯到 J Fox 1972 Outliers in Time Series Jo
  • Linux基础----Makefile(1)

    前言 刚开始学习Linux xff0c 这些那真的是新知识 xff0c 由于感觉将来FPGA的学习会越来越靠近软件的方向发展 xff0c 所以觉得有必要好好地学习一下嵌入式的东西 xff0c 因此有必要把学习的过程记录下来 xff0c 方便
  • 【OpenCV】ChArUco标定板角点的检测Detection of ChArUco Corners

    opencv3 4 15源文档链接 link ChArUco标定板角点的检测 GoalSource codeCharuco板创建ChArUco板检测ChArUco姿势估计 ArUco标记和板的快速检测和多功能性是非常有用的 然而 xff0c
  • 错误 MSB3721

    错误 MSB3721 命令 C Program Files NVIDIA GPU Computing Toolkit CUDA v10 2 bin nvcc exe gencode 61 arch 61 compute 30 code 61
  • 倒立摆状态反馈控制——分析、建模与仿真(matlab)

    倒立摆状态反馈控制 引言 倒立摆是机器人学中一个非常重要的模型 xff0c 火箭 导弹 独轮车 双足机器人 四足机器人 xff0c 基本都是倒立摆的变形 问题描述 关于倒立摆的问题描述如下 xff1a 如图所示的倒立摆系统 摆的关节连接在一
  • docker pull rabbitmq:management 怎样指定版本

    docker pull rabbitmq 3 8 1 management
  • git 命令学习

    git 命令学习 git clone https github com zhaji01 notes git 克隆远程仓库 git status 本地仓库状态 git add lt file gt 把修改 xff08 包括创建 修改 删除 解
  • 【实例记录】在ubuntu上运行python实现与单片机多线程串口通信

    文章目录 工具步骤 工具 工具 xff1a 自己电脑双系统的ubuntu18 04 单片机esp8266 一个usb转ttl模块 xff0c ubuntu上已经下载了python的3 6和pip xff0c 还需要pip install s
  • 【过程记录 】windows和ubuntu两台电脑局域网进行socket通信收发数据和传输文件

    实验图片和前期准备 xff1a ubuntu作为服务端 xff0c windows客户端传输数据和文件 xff1a windows作为服务端 xff0c ubuntu作为客户端 xff1a 实验图片和前期准备 xff1a 服务端发送和接受i
  • 过程记录 yolov3目标检测输出目标坐标和原图物体像素坐标比较

    设备 xff1a jetsonnano B01 一个usb广角摄像头 语言为python 库为opencv 框架pytorch 大家都知道yolov3的坐标变换过程比较复杂 xff0c 大概要经过图片缩放 xff0c 对数空间变换等等 xf
  • Rt-Thread学习笔记-----信号量(五)

    线程间同步 1 什么是线程间同步 xff1f 同步是指按预定的先后次序进行运行 xff0c 线程同步是指多个线程通过特定的机制来控制线程之间的执行顺序 xff0c 也可以说是在线程之间通过同步建立起执行顺序的关系 xff0c 如果没有同步
  • C++类和对象——空指针访问成员函数

    C 43 43 中空指针也是可以访问成员函数的 xff0c 但是也要注意有没有用到this指针 xff1b 如果用到this指针 xff0c 需要加以判断保证代码的健壮性 span class token macro property sp
  • nodejs实现简单的自动化部署

    如题 xff0c nodejs通过码云提供的web hooks实现简单的服务器自动部署 大致流程 xff1a 1 通过码云提供的web hooks xff0c 创建一个request通过后的回调接口 xff08 说白了就是配置一个码云审批通
  • 2022届春招实习面经(CV岗)——offer经

    已拿offer公司 xff1a 腾讯 ponyai vivo研究院 华为 字节 面了一面就没继续面了 xff1a 海康威视 虎牙 京东 本科211 xff0c 硕士985 二区在投论文 43 顶会下的top5比赛 43 小厂三个月实习经历
  • LeetCode刷题笔记 --- python

    目录 一 python交换两个变量的值1 1 使用tuple1 2 使用临时变量temp 二 python中 和 区别三 python列表的使用3 1 列表的基本操作3 2 列表实现栈操作3 3 列表实现排序3 4 列表的算法效率 四 py