[python 刷题] 刷题常用函数

news2024/11/25 20:23:50

[python 刷题] 刷题常用函数

最近直到未来一段时间之内应该都会用 python 刷题了,所以记一下碰到的还蛮好用的方法

按照分区实现,基本上刷一个类型的题,了解一些常用函数,就更新一下

这里假设你对编程语言有一定的了解,常用的 if/elif/elsewhile, for/range,或者新建一个比较常用的数据类型,如初始化 list/array, tuple, dict 这种就不写了

不知道怎么归类

一些比较常用,不太依赖于某种数据类型的函数……?

lambda

lambda 单独作为一个 section,其语法为 lambda arguments: expression,这是一个不会也无所谓,但是稍微了解一下会方便很多的存在

一些简单的用法为:

# 返回一个 list,值为原本 list 的平方
map(lambda x: x * x, some_list)

# 过滤奇数
list(filter(lambda x: x % 2 == 0, some_list))

如果只需要写一个 不被重复 并且比较短的函数,lambda 是一个比较合适的选项

sorted

语法为:sorted(iterable, key, reverse),其中因为 sorted 可以接受整个 iterable,因此也可以根据一些特质去进行排序。因为接受的是 iterable,因此 tuple 也可以使用 sorted

另外对比 array.sort()sorted() 不会修改原有的数据类型,而是返回一个新的数据类型,因此在有 不修改 input 这种需求,或是对 dict 进行排序的需求时,就很方便

其中 key 是一个 function,这里使用 lambda 就很方便,如 [python 刷题] 347 Top K Frequent Elements 一个解法是对字符出现的频率进行排序,这里就可以使用 sorted(): sorted_map = sorted(map.items(), key=lambda x: x[1], reverse=True)

string

  • f-strings

    f-strings 指代的是 python 中的 formatted string,主要用于可以对字符串进行修改,大多数情况下需要搭配其他的函数进行使用

    如 271. Encode and Decode Strings 这一题中,format string 可以使用:

    def encode(self, strs: List[str]) -> str:
      """Encodes a list of strings to a single string.
      """
      return ''.join(map(lambda s: f'{len(s)}#{s}', strs))
    

    来代替原本的循环

dict/hashtable

  • get(key, default_value)

    这里用语获取值,如果 dict 中不存在值的话,就是用第二个参数

    如:d = {}

    d.get('c') 没有任何输出,返回值为 <class 'NoneType'>

    d.get('c', 0) 返回 0

    多用于从 dict 中获取 value 进行修改

  • ==

    [python 刷题] 242 Valid Anagram 里有稍微提到过,python 中对 dict 使用 == 基本上等同于一个深对比,而不是直接对比地址

    因此判断两个 dict 是否相等,可以使用 dict1 == dict2 进行判断

  • defaultdict

    这里主要针对 dict 中需要保存非原始类型的题目,defaultdict 会提供默认值,这样直接使用 dict[key].append() 这样就不会报错,同时也不需要用 if/else 去创建一个新的数据类型

  • Counter

    Counter 是一个特异化的 dict,字如其名,主要用于计数

    依旧以 [python 刷题] 242 Valid Anagram 这道题为例,完全手写 dict 的答案为:

    class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t):
            return False
    
        char_dict = {}
        for l in s:
            if l in char_dict:
                char_dict[l] = char_dict[l] + 1
            else:
                char_dict[l] = 1
    
        for l in t:
            if l not in char_dict:
                return False
            if char_dict[l] == 1:
                del char_dict[l]
            else:
                char_dict[l] = char_dict[l] - 1
    
        return True
    

    使用 Counter== 两个特性的答案为:

    class Solution:
      def isAnagram(self, s: str, t: str) -> bool:
          return collections.Counter(s) == collections.Counter(t)
    

    一般需要对频率进行操作的话,我个人建议还是用 defaultdict 或是 dict,但是只是对频率进行读取,使用 Counter 会方便很多

list/array

  • list comprehension

    这是一个很强大的功能,熟练室友我觉得只能靠积累

    里面可以嵌套 if/else 和循环,语法为:[expression for item in iterable if condition else condition],其中 else 可以省略,下面依旧举几个例子说明:

    # flatten 2d array
    flat_array = [num for row in matrix for num in row]
    
    # get even number from 1-9
    [x for x in range(10) if x % 2 == 0]
    
    # captilize word in list
    [word.capitalize() for word in words]
    

    这个搭配嵌套一些上面的知识点,还是可以写出点比较有意思的代码的,依旧用 [python 刷题] 347 Top K Frequent Elements 为例,之前笔记里的解法为:

    class Solution:
      def topKFrequent(self, nums: List[int], k: int) -> List[int]:
          count = {}
          freq = [[] for i in range(len(nums) + 1)]
    
          for n in nums:
              count[n] = 1 + count.get(n, 0)
          for n, c in count.items():
              freq[c].append(n)
    
          res = []
          for i in range(len(freq) - 1, 0, -1):
              for n in freq[i]:
                  res.append(n)
                  if len(res) == k:
                      return res
    
    

    1-liner 的解法为:

    class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        return [val[0] for i, val in enumerate(sorted(collections.Counter(nums).items(), key=lambda x: x[1], reverse=True)) if i < k]
    

    有趣的是,其是这样的写法也没有慢很多:

    在这里插入图片描述

    大概是 python 内部对 list compression 做的优化吧

2d array

  • divmod

    a, b = divmod(x, y) 相当于:

    a = x // y
    b = x % y
    

    属于稍微方便一点的小优化

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python海洋专题七之Cartopy画地形水深图的陆地填充

Python海洋专题七之Cartopy画地形水深图的陆地填充 第一期图 本期&#xff1a; 上期 Cartopy画地形水深图 但是陆地没有填充 如图 本期内容 陆地填充 如图&#xff1a; 详细过程如下 1&#xff1a;陆地填充 land feature.NaturalEarthFeature(‘physical’, ‘land’…

如何在Qt6中引入Network模块

2023年10月1日&#xff0c;周日凌晨 如果用的是CMake find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) 但在实际使用中&#xff0c;我发现有以下几点要注意&#xff1a; 1、要把“mytarget”换成项目名称 2、要去掉…

指针巩固习题

1.该程序输出的结果为 #include<stdio.h> int main() {int arr[]{1,2,3,4,5};short *p(short*)arr;//转化类型int i0;for(i0;i<4;i){*(pi)0;//short型指针1跳过两个字节}for(i0;i<5;i){printf("%d",arr[i]);}return 0;} 2.程序的输出结果为 #include&…

oracle-使用PLSQL工具自行修改用户密码

1、使用PLSQL工具&#xff0c;输入用户名和原密码登录&#xff0c;如下图 2、登录后&#xff0c;在会话下拉菜单中找到”Change password..” 3、在跳出的窗口中配置新密码&#xff0c;修改完成后单击”确认”&#xff0c;后退出PLSQL 4、重新打开PLSQL&#xff0c;使用新密码登…

1. windows安装elasticSearch

目录 1. 下载 2. 安装和启动 1. 下载 下载地址&#xff1a;https://elasticsearch.cn/download/ 下载7.8.0版本&#xff1a; 下载后的elasticsearch-7.8.0-windows-x86_64.zip文件放在本地合适的位置。 2. 安装和启动 解压elasticsearch-7.8.0-windows-x86_64.zip文件&…

蜂蜜配送销售商城小程序的作用是什么

蜂蜜是农产品中重要的一个类目&#xff0c;其受众之广市场需求量大&#xff0c;但由于非人人必需品&#xff0c;因此传统线下门店经营也面临着痛点&#xff0c;线上入驻平台也有很多限制难以打造自有品牌&#xff0c;无法管理销售商品及会员、营销等&#xff0c;缺少自营渠道&a…

DirectX12_Windows_GameDevelop_1:向量代数

引言 向量在计算机图形学、碰撞检测和物理模拟中扮演者关键的角色。因此在游戏开发之前我们必须先了解向量。本章研究向量的使用。 一、向量 如果你对数学中的向量不太熟悉&#xff0c;建议阅读《3D数学基础&#xff1a;图形和游戏开发 第2版》&#xff0c;如果你需要某些PD…

敏感性分析一览

敏感性分析 SobolMorrisFourier Amplitude Sensitivity Test (FAST)Random Balance Designs - Fourier Amplitude Sensitivity Test (RBD-FAST)Delta Moment-Independent MeasureDerivative-based Global Sensitivity Measure (DGSM)Fractional Factorial Sensitivity Analysis…

Flutter笔记:滚动之-无限滚动与动态加载的实现(GetX简单状态管理版)

Flutter笔记 无限滚动与动态加载的实现&#xff08;GeX简单状态管理版&#xff09; 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq…

Spring Framework 学习笔记5:事务

Spring Framework 学习笔记5&#xff1a;事务 1.快速入门 1.1.准备工作 这里提供一个示例项目 transaction-demo&#xff0c;这个项目包含 Spring 框架、MyBatis 以及 JUnit。 对应的表结构见 bank.sql。 服务层有一个方法可以用于在不同的账户间进行转账&#xff1a; Se…

云原生Kubernetes:对外服务之 Ingress

目录 一、理论 1.Ingress 2.部署 nginx-ingress-controller(第一种方式) 3.部署 nginx-ingress-controller(第二种方式) 二、实验 1.部署 nginx-ingress-controller(第一种方式) 2.部署 nginx-ingress-controller(第二种方式) 三、问题 1.启动 nginx-ingress-controll…

Python海洋专题五之水深地形图海岸填充

Python海洋专题五之水深地形图海岸填充 海洋与大气科学 上期读取nc水深文件&#xff0c;并出图 但是存在一些不完美&#xff0c;本期修饰 本期内容 障眼法&#xff1a;把大于零的数据填充为陆地的灰色&#xff1b; 把等于零的数据画等深线为陆地和海洋的分界线&#xff01;…

怒刷LeetCode的第21天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;哈希表 方法二&#xff1a;计数器数组 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;分治法 方法二&#xff1a;快速幂 迭代 方法三&#xff1a;快速幂 递归 第三题 题目来源 题目内容 …

JUC第十二讲:JUC锁: 锁核心类AQS详解

JUC第十二讲&#xff1a;JUC锁: 锁核心类AQS详解 本文是JUC第十二讲&#xff0c;JUC锁: 锁核心类AQS详解。AbstractQueuedSynchronizer抽象类是核心&#xff0c;需要重点掌握。它提供了一个基于FIFO队列&#xff0c;可以用于构建锁或者其他相关同步装置的基础框架。 文章目录 J…

aarch64 平台 musl gcc 工具链手动编译方法

目标 手动编译一个 aarch64 平台的 musl gcc 工具链 musl libc 与 glibc、uclibc 等,都是 标准C 库, musl libc 是基于系统调用之上的 标准C 库,也就是用户态的 标准C 库。 musl libc 轻量、开源、免费,是一些 操作系统的选择,当前 Lite-OS 与 RT-Smart 等均采用自制的 mu…

【算法训练-贪心算法】一 买卖股票的最佳时机II

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【贪心算法】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

开源校园服务小程序源码 校园综合服务小程序源码 包含快递代取 打印服务 校园跑腿【带详细部署教程】

校园综合服务小程序开源源码是一款功能强大的小程序&#xff0c;可用于搭建校园综合服务平台。共有6个选项可供选择&#xff0c;包括快递代取、打印服务、校园跑腿、代替服务、上门维修和其他帮助。 使用该源码需要自备服务器和备案过的域名&#xff0c;推荐使用2核4G服务器。最…

【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件

【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 海洋与大气科学 软件 选择此软件是因为习惯了&#xff0c;matlab能看得到的界面。 新建文本 导入相关库 import netCDF4,numpy netCDF4:该包作用&#xff1a;读、写netCDF files. numpy:该包作用&#xff1a;…

【JavaScript】读取本地json文件并绘制表格

本文为避免跨域问题&#xff0c;使用了改造过的本地json文件的方法实现读取json数据并绘制表格。 如果发起http请求获取本地 json文件中数据&#xff0c;需要架设本地服务器&#xff0c;本文不做阐述。 概述 1、json在本地&#xff0c;并不需要从服务器下载。 2、采用jquery…

八、垃圾收集高级

JVM由浅入深系列一、关于Java性能的误解二、Java性能概述三、了解JVM概述四、探索JVM架构五、垃圾收集基础六、HotSpot中的垃圾收集七、垃圾收集中级八、垃圾收集高级👋垃圾收集高级 ⚽️1. CMS CMS 收集器是专为老年代空间设计的一个延迟极低的收集器,它通常会与一个稍微…