刷leetcode中常用且有效的方法总结

刷题的时候经常会因为不知道一个方法多写很多行代码,既然有trick为何不用!你问我眼中为何常含泪水,因为我忘记方法忘的深沉。那么我决定出一期!刷题中常用且有效的方法们!将会陆续补充,有补充欢迎评论区留言

目录

python

.join()

Counter

n.sort()

sorted(n)

set()

for i in range

enumerate()

C++

ord


python

.join()

join()是 Python 中的一个字符串方法,它用于将序列(如列表、元组、集合等,但集合需要首先转换为列表或其他有序序列,因为集合是无序的)中的元素以指定的字符连接生成一个新的字符串。

stack = ["home", "user", "documents"]  
result = "/" + "/".join(stack)  
print(result)  # 输出: /home/user/documents

Counter

Counter 提供了一个快速简单的方式来统计哈希对象在集合中出现的次数。

        1.通过传递一个可迭代对象(如列表、元组、集合等)给 Counter 的构造函数来创建一个 Counter 对象,这个可迭代对象中的元素将会被计数:

cnt = Counter(['apple', 'banana', 'apple', 'orange', 'banana', 'grape'])  

print(cnt)  # 输出: Counter({'apple': 2, 'banana': 2, 'orange': 1, 'grape': 1})

        2.访问元素计数,你可以像访问字典一样访问 Counter 对象的元素及其计数:

print(cnt['apple'])  # 输出: 2  
print(cnt['banana'])  # 输出: 2  
print(cnt['pear'])  # 如果 pear 不在 Counter 中,则返回 0

        3.更新计数,可以使用 update() 方法来更新计数器中的计数。可以传递另一个可迭代对象或者另一个 Counter 对象:

cnt.update(['apple', 'pear', 'banana'])  
print(cnt)  # 输出: Counter({'apple': 3, 'banana': 3, 'orange': 1, 'grape': 1, 'pear': 1})

n.sort()

这是一个列表(list)的方法,它会直接对列表n进行原地(in-place)排序,即直接修改原列表,而不返回任何值(或者说返回None)。这意味着如果你尝试将n.sort()的返回值赋给另一个变量,你会得到一个None。

# 使用 n.sort()  
my_list = [3, 1, 4, 1, 5, 9, 2]  
my_list.sort()  # 直接修改原列表  
print(my_list)  # 输出: [1, 1, 2, 3, 4, 5, 9]  
  
# 尝试获取 n.sort() 的返回值  
result = my_list.sort()  
print(result)  # 输出: None  
  

sorted(n)

这是一个内置函数,它可以对任何可迭代对象n进行排序,并返回一个新的列表,包含排序后的元素。原列表n不会被修改。

# 使用 sorted(n)  
my_list = [3, 1, 4, 1, 5, 9, 2]  
sorted_list = sorted(my_list)  # 返回新的列表,原列表不变  
print(sorted_list)  # 输出: [1, 1, 2, 3, 4, 5, 9]  
print(my_list)  # 输出: [1, 1, 2, 3, 4, 5, 9],原列表未变  
  
# 对元组进行排序  
my_tuple = (3, 1, 4, 1, 5, 9, 2)  
sorted_tuple = sorted(my_tuple)  # 返回新的列表  
print(sorted_tuple)  # 输出: [1, 1, 2, 3, 4, 5, 9]

set()

可能这里出现set有人会觉得很奇怪,但是我觉得set有时候真的很好用!尤其是需要筛去多余元素的时候,因为set是专用来保存无序且不重复集合的。

定义:

  • python中set是一种无序且不重复的元素集合。
  • Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔
occ = set() #创建一个空集合
non_empty_set = {1,2,3} #创建一个包含元素的非空集合
#注意,如果要创建空集合,只能使用 set() 函数实现。因为直接使用一对 {},Python 解释器会将其视为一个空字典。
 
occ.add(1) #添加元素
occ.add(2)
 
occ.remove(1) #删除元素
occ.discard(2) 
#删除元素,与remove的区别是,若元素不存在,使用remove会引发KeyError,使用discard不会
 
occ.pop() #随机删除集合中元素
occ.clear() #清空集合
occ.copy #复制集合
len(occ) #计算occ中元素个数
 
#集合运算
set1 = {1,2,3}
set2 = {3,4,5}
 
union_set = set1 | set2 #并集:{1,2,3,4,5}
intersection_set = set1&set2 #交集 {3}
different_set = set1 -set2 #差集 {1,2}

迭代方面:

for i in range

    for i in range(n)用于正向迭代,从0到n-1。
    for i in range(start, n)用于正向迭代,从start到n-1。
    for i in range(n, -1, -1)用于逆向迭代,从n到0。

参数:<起点>, <终点>, <增量>

传入两个参数:省略增量。意味着增量是1

传入一个参数:省略起点和增量。意味着起点是0,增量是1

enumerate()

enumerate()函数常用于循环中获取(可迭代对象)元素和索引的对应关系,例如列表、元组或字符串,enumerate可以将其组成一个索引序列,利用它可以同时获得索引和值。

#1.基本用法:
 my_list = ['apple', 'banana', 'cherry']
 for index, value in enumerate(my_list):
     print(index, value)

#这段代码会输出:

 0 apple
 1 banana
 2 cherry

#2.指定起始索引

 my_list = ['apple', 'banana','cherry']
 for index, value in enumerate(my_list, start=1):
     print(index,value)

#这段代码会输出:
 1 apple
 2 banana
 3 cherry

装饰器

最近发现装饰器是一个非常有意思的东西,很高级!

允许你在不修改函数或类的源代码的情况下,为它们添加额外的功能或修改它们的行为。装饰器本质上是一个接受函数作为参数的可调用对象(通常是函数或类),并返回一个新函数。

def my_decorator(func):  
    def wrapper(*args, **kwargs):  
        print("Something is happening before the function is called.")  
        result = func(*args, **kwargs)  
        print("Something is happening after the function is called.")  
        return result  
    return wrapper  
  
@my_decorator  
def say_hello(name):  
    print(f"Hello, {name}!")  
  
# 当你调用 say_hello 函数时,它实际上会调用 wrapper 函数,  
# wrapper 函数在调用 say_hello 之前和之后都添加了一些额外的输出。  
say_hello("Alice")

早期的结构化编程,几乎所有的方法都是“静态方法”,而直到面向对象编程语言来临时,才被区分为了实例化方法和静态方法。而这样的区分,并不是单一从性能的角度进行考虑的,而是为了让开发更加模式化,面向对象化。

比如说人这个类,姓名、年龄等,这些属性就必须是实例化属性,而所属科目,比如灵长类,则一定是静态属性,因为这个属性并不依赖于某一个人。

(1)@classmethod

@classmethod 是一个 Python 的内置装饰器,用于定义类方法。类方法是属于类而不是实例的方法,可以通过类名或实例调用,与实例的状态无关。@classmethod 装饰的方法的第一个参数通常被命名为 cls,表示类本身。

使用方法:无需实例化,可以通过类名或实例调用

    注意:
        类方法内不可以直接调用实例方法,也不可以调用实例变量
        类和实例都可以直接调用类方法。

class MyClass:
    @staticmethod
    def static_method():
        print("This is a static method.")
    
    @classmethod
    def class_method(cls):
        cls.static_method()
        print("This is a class method.")
    
    def instance_method(self):
        self.static_method()
        print("This is an instance method.")

# 通过类名调用静态方法
MyClass.static_method()
# 输出: This is a static method.

# 通过类方法调用静态方法
MyClass.class_method()
# 输出:
# This is a static method.
# This is a class method.

# 创建类的实例
obj = MyClass()
# 通过实例调用静态方法
obj.static_method()
# 输出: This is a static method.

# 通过实例方法调用静态方法
obj.instance_method()
# 输出:
# This is a static method.
# This is an instance method.

(2)@staticmethod

@staticmethod 是一个 Python 的一个内置装饰器,用于定义静态方法。静态方法是类中的方法,与类的实例无关,也无法访问类的实例变量或其他实例方法。静态方法通过类名调用,而不是通过实例调用。

(3)@property、@setter装饰器基本用法

    定义
    @property装饰器是Python中一个特殊的装饰器,用于定义类的属性。它提供了一种简洁的方式来定义属性的访问方法,并且可以在需要时进行计算或验证。应用于类的实例方法,将其转换为类的属性。通过使用@property装饰器,可以将一个方法定义为只读属性,也可以定义一个可读写的属性,并且可以实现属性删除。

    @setter装饰器用于定义一个属性的setter方法,用于修改属性的值。使用@setter时,我们需要在@property装饰的属性方法之后,紧跟一 个setter方法,并使用@属性名.setter来装饰该方法

    @setter通常用于以下场景:
    当一个属性的值需要计算得到,而不是直接存储在类的属性中时,我们可以使用@setter来提供一个修改属性值的接口。
    当某个属性的值需要经过一些处理后再进行存储时,我们可以使用@setter来自动执行处理操作。

C++

ord

ord(s[i]) - ord('0'):

ord()的意思时求一个字符的Ascii码。

因为程序里如果x时用字符读入的,不能把他当作数字运算,要转化为数字。

比如说“0”的Ascii码为48,"1"到“9”的Ascii码分别为49到57,所以ord(‘0’)就是等于48的,

所以改为ord(x) - 48也是对的,通过上述表达式就可以把字符转化为数字了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

昇思MindSpore学习笔记4-01生成式--CycleGAN图像风格迁移互换

摘要&#xff1a; 记录了昇思MindSpore AI框架用循环对抗生成网络模型CycleGAN实现图像匹配的方法、步骤。包括环境准备、数据集下载、数据加载和预处理、构建生成器和判别器、优化、模型训练和推理等。 1.模型介绍 1.1模型简介 CycleGAN(Cycle Generative Adversarial Netwo…

黑科技带来时尚的体验,Umelody悠律凝声环开放式耳机评测

如今的蓝牙耳机&#xff0c;已经有了很多种不同的风格&#xff0c;但是却很少有什么创新的。直至近期&#xff0c;耳挂式蓝牙耳机成为了开放式耳机的热点&#xff0c;其设计和风格都非常与众不同&#xff0c;那它体验如何&#xff0c;有什么优势呢&#xff1f; 本次体验&#…

����: �Ҳ������޷��������� javafx.fxml ԭ��: java.lang.ClassNotFoundException解决方法

如果你出现了这个问题&#xff0c;恭喜你&#xff0c;你应该会花很多时间去找解决方法。别问我怎么知道的... 解决方法&#xff1a; 出现乱码的原因&#xff1a;配置vm时 这些配置看似由有空格&#xff0c;换行&#xff0c;实则没有。所以解决办法就是&#xff0c;重新配置你…

中英双语介绍日本东京(Tokyo)

中文版 东京介绍 东京是日本的首都&#xff0c;也是日本的政治、经济、文化和国际交流中心。以下是对东京的详细介绍&#xff0c;包括其地理位置、人口、经济、教育、文化和主要景点。 地理位置 东京位于日本关东地区的南部&#xff0c;地理坐标大致为北纬35度41分&#xf…

多链路聚合通信路由在应急救援活动中的重要性及解决方案

在应急救援指挥活动中&#xff0c;多链路聚合通信设备如同一座坚固的桥梁&#xff0c;将信息快速、准确地传递至每一个角落。面对复杂多变的救援现场&#xff0c;这类设备展现了其卓越的适应性和稳定性。 想象一下&#xff0c;当灾害突然降临&#xff0c;信息的传递变得至关重…

yolov5 json 和 txt数据格式关系

训练阶段 和 推理阶段数据格式转换说明 关于yolov5 数据格式一直以来都傻傻分不清楚&#xff0c;这下进行了一个梳理&#xff0c;做了笔记&#xff0c;也希望可帮助到有需要的有缘人~ 转换部分代码

Transform Data with SQL

rm -r dp-203 -f git clone https://github.com/MicrosoftLearning/dp-203-azure-data-engineer dp-203 cd dp-203/Allfiles/labs/01 ./setup.ps1 -- This is auto-generated code SELECTTOP 100 * FROMOPENROWSET(BULK https://datalakexxxxxxx.dfs.core.windows.net/fil…

在Apache HTTP服务器上配置 TLS加密

安装mod_ssl软件包 [rootlocalhost conf.d]# dnf install mod_ssl -y此时查看监听端口多了一个443端口 自己构造证书 [rootlocalhost conf.d]# cd /etc/pki/tls/certs/ [rootlocalhost certs]# openssl genrsa > jiami.key [rootlocalhost certs]# openssl req -utf8 -n…

docker buildx 交叉编译设置

dockerd配置文件 /etc/docker/daemon.json设置&#xff1a; rootubuntu:/etc/docker# cat daemon.json {"insecure-registries":["localhost:5000","127.0.0.1:5000","172.16.67.111:5000"],"features": {"buildkit&…

磁力泵与屏蔽泵

1.磁力泵的工作原理 磁力传动是利用磁体能吸引铁磁物质以及磁体或磁场之间有磁力作用的特性&#xff0c;而非铁磁物质不影响或很少影响磁力的大小&#xff0c;因此可以无接触地透过非磁导体&#xff08;隔离套&#xff09;进行动力传输。磁力传动可分为同步或异步设计。 大多数…

基于深度学习的人脸多任务识别(附代码)

项目说明 本项目为人脸多任务识别(单输入&#xff0c;多输出)&#xff0c;可以同时输出人脸关键点、性别和年龄。 采用了两个算法进行应用的实现&#xff0c;人脸目标检测和人脸多任务识别。 其中人脸目标检测采用YOLOV5进行实现&#xff0c;主要对人脸部分进行截取&#xf…

查看电脑ip地址快捷键是什么?是哪个

在网络世界中&#xff0c;IP地址是每个网络设备的唯一标识&#xff0c;无论是我们的电脑、手机还是其他联网设备&#xff0c;都需要一个独特的IP地址来进行通讯。在日常生活和工作中&#xff0c;我们有时需要查看电脑的IP地址&#xff0c;以便进行网络设置、故障排查或远程连接…

WordPress主题开发进群付费主题v1.1.2 多种引流方式

全新前端UI界面&#xff0c;多种前端交互特效让页面不再单调&#xff0c;进群页面群成员数&#xff0c;群成员头像名称&#xff0c;每次刷新页面随机更新不重复&#xff0c;最下面评论和点赞也是如此随机刷新不重复 进群页面简介&#xff0c;群聊名称&#xff0c;群内展示&…

unix高级编程系列之文件I/O

背景 作为linux 开发者&#xff0c;我们不可避免会接触到文件编程。比如通过文件记录程序配置参数&#xff0c;通过字符设备与外设进行通信。因此作为合格的linux开发者&#xff0c;一定要熟练掌握文件编程。在文件编程中&#xff0c;我们一般会有两类接口函数&#xff1a;标准…

Vue异步操作发送AJAX请求

5. Vue异步操作 1 axios介绍 在Vue中发送异步请求&#xff0c;本质上还是AJAX。我们可以使用axios这个插件来简化操作&#xff01; 使用步骤 1.引入axios核心js文件。 2.调用axios对象的方法来发起异步请求。 3.调用axios对象的方法来处理响应的数据。 axios常用方法 代码…

泽州县和美环保科技有限公司——绿色环保的践行者

在环保产业蓬勃发展的今天&#xff0c;泽州县和美环保科技有限公司以其卓越的技术和强大的实力&#xff0c;成为山西省危废综合处置领域的翘楚。作为雅居乐环保集团的全资子公司&#xff0c;和美环保科技有限公司紧跟集团发展战略&#xff0c;致力于为社会提供全方位的环境服务…

阿里云安装rabbitMQ

1、首先看linux 版本 uname -a如果时centos 7 可以参考其他文档。我这里是centos 8 这个很重要 。网上全是按centos7 按照。导致我前面一直安装不上 各种问题。 2、查看rabbitmq 对应 erl 的版本下载 https://www.rabbitmq.com/docs/which-erlang 选择rabbitmq 3.11.19 选择…

https 自签证书相关生成csr文件、p12文件、crt文件、jks文件、key文件、pem文件

文章目录 前言https 自签证书相关生成csr文件、p12文件、crt文件、jks文件、key文件、pem文件1, 检查openssl的版本2. 生成私钥和证书签署请求 (CSR)3. 生成自签名证书4. 将证书和私钥转换为 PKCS12 格式的密钥库5. 创建信任库 (Truststore)6. 将 PKCS12 文件转换为 JKS 文件7.…

java对接海康摄像头

现在制造业很多都是用的海康的摄像头&#xff0c;作为程序员有时候需要对接海康摄像头&#xff0c;实现门禁访问控制&#xff0c;监控预览&#xff0c;录像文件下载等功能。 一、开发环境准备 在海康官网下载SDK开发文档及库文件&#xff1a; https://open.hikvision.com/dow…

关于如何做好淘汰 IT 资产数据安全销毁工作的思考 文件销毁 硬盘销毁 数据销毁 物料销毁 文件粉碎

在当今数字化时代&#xff0c;企业的 IT 资产不断更新换代&#xff0c;淘汰的 IT 资产中往往存储着大量的敏感数据。如何确保这些数据在资产淘汰过程中被安全销毁&#xff0c;成为了企业面临的重要挑战。以下是对如何做好淘汰 IT 资产数据安全销毁工作的一些思考。 一、明确数…