Python必知必会:程序员必须知道的22个Python单行代码!
今天给大家分享24个每个Python程序员都必须知道的单行代码,帮你写出更简洁、更优雅、更高效的代码。

1. 列表推导式
列表推导式(List Comprehensions)可以提供一种简洁的方式创建列表。相较于传统的循环,列表推导式更高效、可读性更高。
# Bad squares: list[int] = [] for i in range(1,11): squares.append(i ** 2) print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] # Better squares: list[int] = [i ** 2 for i in range(1,11)] print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2. 累积计算操作
Python的 reduce() 结合 operator 运算符模块可以实现数字的累积计算操作,比如累积求和、累积求积。
from operator import add, mul from functools import reduce cum_sum: int = reduce(add, range(1, 10)) print(cum_sum) # 45 factorial: int = reduce(mul, range(1, 5)) print(factorial) # 24
3. lambda 实现排序
lambda 函数是你可以在单行代码中使用的匿名函数,对于像排序这样的任务很实用。
names: list[tuple[int, str]] = [(1, 'Jack'), (2, 'Alex'), (3, 'Bob')] sorted_names: list = sorted(names, key=lambda x: x[1]) print(sorted_names) # [(2, 'Alex'), (3, 'Bob'), (1, 'Jack')]
这里,我们基于第二个元素(列表中的元组)对元组列表进行排序。类似地,将lambda 函数用作排序键,也可以基于字典的值对字典进行排序。
4. 字典合并
通过 ** 前缀可以将多个字典轻松合并为一个。
info1: dict = {'name': 'Jack', 'age': 28} info2: dict = {'gender': 'Male', 'city': 'San Francisco'} person_info: dict = {**info1, **info2} print(person_info) # {'name': 'Jack', 'age': 28, 'gender': 'Male', 'city': 'San Francisco'}
多个字典(2个以上)也可以通过这种方式合并,相较于循环或其他函数,这种方式更简洁、高效。
5. 字典推导式
通过字典推导式我们可以根据可迭代对象快速创建字典。
keys: list[str] = ['name', 'age', 'gender'] values: list[str | int] = ['Jackzhang', 28, 'Male'] person_info: dict = {key: value for key, value in zip(keys, values)} print(person_info) # {'name': 'Jackzhang', 'age': 28, 'gender': 'Male'}
相较于传统的循环方式,字典推导式更简洁和高效。
6. 获取字典的最大值
通过 lambda 函数可以轻松找到字典的最大值。
d: dict[str, int] = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} max_key: str = max(d, key=lambda x: d[x]) print(max_key) # e
这个单行代码可以找到字典中找到最大值对应的键,这在像查找数据集中性能最佳的项目这样的任务中非常有用。
7. 子串成员关系检查
检测某个子串是否在目标字符串中使用一行代码即可搞定:
is_contain: bool = 'Python' in "I'm Jackzhang, I love Python" print(is_contain) # True
这个单行代码可以检测某个字串是否在目标字符串中,对于像文本搜索或过滤这样的任务非常有用。
8. 回文检测(通过切片)
你可以通过切片反转检测一个字符串是否为回文(正序和倒序均是同一个字符串)。
is_palindrome = lambda x : x == x[::-1] print(is_palindrome("level")) # True
这里,这个单行代码可以检测一个给定字符串是否为回文。切片操作 x[::-1] 会反转字符串,lambda 函数则会将其和原始字符串进行比较。
9. 字典反转
有时我们需要反转字典,即交换键和值。Python的字典推导可以优雅地处理这个任务。
d: dict = {'a': 1, 'b': 2, 'c': 3} inverted_d: dict = dict(zip(d.values(), d.keys())) print(inverted_d) # {1: 'a', 2: 'b', 3: 'c'}
这里,我们通过字典推导式和 zip() 函数很轻松地实现了字典的反转。当然,zip() 函数也可以用循环替代:
inverted_d: dict = {v: k for k, v in d.items()}
很明显,使用 zip() 函数更简洁高效。这个单行代码可以轻松实现字典的反转,这对于像逆向查找这样的场景非常有用。
10. zip() 实现元素配对
细心的朋友应该注意到了,我们在前面的多个场景中都用到了 zip() 函数。它可以实现多个列表元素的一一配对(结果为元组),简化组合数据集的创建。
names: list[str] = ['Jack', 'Alex', 'Jim'] ages: list[int] = [18, 25, 20] combined_info: list[tuple] = list(zip(names, ages)) print(combined_info) # [('Jack', 18), ('Alex', 25), ('Jim', 20)]
注意,若多个列表的长度不同,则结果列表的长度以最短列表为准。zip() 函数对于合并不同来源的数据任务非常有用。
11. 获取两个列表的交集
我们都知道,在数学中,集合不允许重复元素的存在。利用这一特性,我们可以轻松计算两个列表的交集。
list1: list[int] = [1, 2, 3, 4, 5] list2: list[int] = [3, 4, 5, 6, 7] intersection: list[int] = list(set(list1) & set(list2)) print(intersection) # [3, 4, 5]
12. 简化多条件检查
any() 和 all() 可以有效简化多条件检查,避免多重 or(any())和 and(all())语句的使用。
values: list[int] = [1, 2, -3, 4, 5] has_greater: bool = any([x > 4 for x in values]) all_positive: bool = all([x > 0 for x in values]) print(has_greater, all_positive) # True False
13. 根据字典生成字典
在Python中,我们可以通过两个列表简单而直观的创建字典。
keys: list[str] = ['name', 'age', 'gender'] values: list[str | int] = ['Jackzhang', 28, 'Male'] person_info: dict = dict(zip(keys, values)) print(person_info) # {'name': 'Jackzhang', 'age': 28, 'gender': 'Male'}
14. 使用 map() 转换列表
map() 可以将一个转换函数应用到可迭代对象中每个元素上,它非常适合用于批量转换的场景。
name: list[str] = ['jack', 'zhang'] capital_name: list[str] = list(map(str.capitalize, name)) print(capital_name) # ['Jack', 'Zhang']
这里,我们使用 map() 将列表中的字符串首字母转换为大写。相较于通过循环执行转换,map() 函数将 str.capitalize 方法应用到列表中的每个元素上,简化了转换过程,且内置函数底层经过优化,效率更高。
15. 获取可迭代对象元素的索引
通过 index(element) 方法可以轻松获取列表中元素的索引:
idx = [1, 2, 3, 4, 5].index(5) print(index) # 4
16. 单行代码实现嵌套循环
我们可以用一行代码通过列表推导式实现二级嵌套循环:
names: list[str] = ['Jack', 'Bob'] ages: list[int] = [18, 25, 20] person_info: list[tuple[str, int]] = [(name, age) for name in names for age in ages] for name, age in person_info: print(name, age) # Output Jack 18 Jack 25 Jack 20 Bob 18 Bob 25 Bob 20
17. 单行代码实现数据过滤
在编程中,数据过滤是一项常见的任务,Python允许你使用列表推导式来高效完成。比如,筛选偶数:
even_numbers: list[int] = [x for x in range(1, 11) if x % 2 == 0] print(even_numbers) # [2, 4, 6, 8, 10]
18. 列表元素去重
利用数学中集合不包含重复元素的特性可以轻松对列表元素去重。
unique_numbers = list(set([1, 2, 2, 4, 5, 4, 3, 2])) print(unique_numbers) # [1, 2, 3, 4, 5]
这个单行代码可以去除列表中的重复值,确保只保留唯一值,这常常用在数据清洗任务中。
19. 列表→字符串
在Python中,使用 join() 方法可以轻松将字符串列表转换为单个字符串。
info: list[str] = ['I', 'love', 'Python', 'coding', 'programming!'] joined_info = ' '.join(info) print(joined_info) # I love Python coding programming!
这个方法在文本处理任务重非常有用,比如合并单词或句子。
20. 一次性读取文件内容
通过 readlines() 方法可以一次性读取文件内容:
lines: list = [line.strip() for line in open('test.txt')] print(lines) # ['line1', 'line2', 'line3']
这个单行代码可以读取文件的所有行,并且移除任意额外的空格,常常用在文件处理中。
21. 字串替换
通过 replace() 方法,Python可以轻松替换字符串中的部分子串:
exp_str: str = 'I love Java'.replace('Java', 'Python') print(exp_str) # I love Python
22. 嵌套列表展开
在处理嵌套列表时,通常我们需要将它们展开平铺为单个列表,Python提供了简单的方式实现这个需求:
nested_list: list[list[int]] = [[1, 2, 3], [4, 5, 6]] flat_list: list[int] = [number for sublist in nested_list for number in sublist] print(flat_list) # [1, 2, 3, 4, 5, 6]
**
关于Python技术储备
**
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

👉Python学习视频合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

👉实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

👉Python副业兼职路线&方法👈
学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方二维码免费领取

相关文章:
Python必知必会:程序员必须知道的22个Python单行代码!
今天给大家分享24个每个Python程序员都必须知道的单行代码,帮你写出更简洁、更优雅、更高效的代码。 1. 列表推导式 列表推导式(List Comprehensions)可以提供一种简洁的方式创建列表。相较于传统的循环,列表推导式更高效、可读…...
MongoDB 的适用场景
MongoDB 的适用场景 MongoDB 是一种基于文档存储的 NoSQL 数据库,与传统的关系型数据库不同,它使用 JSON 类似的二进制文档格式(BSON)来存储数据,并且具备灵活的文档模型、强大的查询能力和水平扩展性。这些特性使得 …...
汽车EDI:montaplast EDI对接
Montaplast 是一家总部位于德国的全球知名汽车零部件供应商,专注于高精度塑料部件的设计、开发和生产。公司成立于1958年,主要为汽车行业提供轻量化、高性能的塑料解决方案。Montaplast 以其在注塑成型技术、表面处理和装配技术方面的专业能力而著称&…...
【idea】设置文件模板
搜索 File and Code Templates 。 添加模板。 在任意文件目录下右键,new->找到添加的模板。 参考链接: IDEA创建模板文件_edit file templates-CSDN博客...
时间戳和日期相互转换+检验日期合法性功能C语言
H文件 #ifndef _TIME_H_ #define _TIME_H_ #include "config.h" #include "DisplayR300.h" #include "DWIN_Fun.h" #include "DWIN_UI.h" #include <string.h>typedef struct {u16 year; /* 定义时间:年 */u8 month; /* 定义…...
SPIRNGBOOT+VUE实现浏览器播放音频流并合成音频
一、语音合成支持流式返回,通过WS可以实时拿到音频流,那么我们如何在VUE项目中实现合成功能呢。语音合成应用非常广泛,如商家广告合成、驾校声音合成、新闻播报、在线听书等等场景都会用到语音合成。 二、VUE下实现合成并使用浏览器播放代码…...
C#绘制常用工业控件(仪表盘,流动条,开关等)
目录 1,使用Graphics绘制Toggle。 效果: 测试代码: Toggle控件代码: 2,使用Graphics绘制Switch。 效果: 测试代码: Switch控件代码: 3,使用Graphics绘制PanelHe…...
Ps:颜色模型、色彩空间及配置文件
颜色模型、色彩空间和配置文件是处理颜色的核心概念。它们虽然互相关联,但各自有不同的功能和作用。 通过理解这些概念及其关系,Photoshop 用户可以更好地管理和优化图像处理流程,确保颜色在不同设备和应用中的一致性和准确性。 颜色模型 Col…...
llvm后端之td定义指令信息
llvm后端之td定义指令信息 引言1 定义指令2 定义Operand3 定义SDNode4 PatFrags4.1 ImmLeaf4.2 PatLeaf 5 ComplexPattern6 谓词条件7 理解dag 引言 llvm后端通过td定义指令信息,并通过dag匹配将IR节点转换为平台相关的指令。 1 定义指令 td通过class Instructio…...
战地机房集装箱数据中心可视化:实时监控与管理
通过图扑可视化技术实时监控战地机房集装箱数据中心的各项运行指标和环境参数,提高部署效率和设备管理能力,确保数据中心稳定运行。...
Linux入门攻坚——31、rpc概念及nfs和samba
NFS:Network File System 传统意义上,文件系统在内核中实现 RPC:函数调用(远程主机上的函数),Remote Procedure Call protocol 一部分功能由本地程序完成 另一部分功能由远程主机上的 NFS本质…...
内网穿透的应用-本地化部署Elasticsearch平替工具OpenObserve并实现无公网IP远程分析数据
文章目录 前言1. 安装Docker2. Docker镜像源添加方法3. 创建并启动OpenObserve容器4. 本地访问测试5. 公网访问本地部署的OpenObserve5.1 内网穿透工具安装5.2 创建公网地址 6. 配置固定公网地址 前言 本文主要介绍如何在Linux系统使用Docker快速本地化部署OpenObserve云原生可…...
哈希表 and 算法
哈希表: 哈希表(Hash table),也被称为散列表,是一种根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射…...
Comsol 共用声固耦合边界与热粘性声学边界的亥姆霍兹腔体超材料板精准隔声设计
声子晶体可分为局域共振型声子晶体和布拉格散射型声子晶体, 由于布拉格声子晶体需要的结构尺寸往往很大, 不便于实际应用; 而基于局域共振型机理的声子晶体能够实现“小体积控制大波长”, 因而有更加广泛的应用, 其中利用Helmholtz共鸣腔是局域共振型机理的典型应用, 近年来, H…...
Linux系统本地化部署Dify并安装Ollama运行llava大语言模型详细教程
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
极光出席深圳国际人工智能展并荣获“最具投资价值人工智能奖”
9月8-10日,由深圳市工业和信息化局、深圳市发展和改革委员会、深圳市科技创新局、深圳市政务服务和数据管理局、深圳市中小企业服务局共同指导,深圳市人工智能行业协会主办的第五届深圳国际人工智能展正式开幕。作为中国领先的客户互动和营销科技服务商&…...
人工智能领域的性能指的是什么
目录 1. 准确性(Accuracy) 2. 精确率与召回率(Precision & Recall) 3. F1分数 4. 运行时间与延迟(Latency) 5. 吞吐量(Throughput) 6. 可扩展性(Scalability&a…...
SQL进阶技巧:如何利用SQL解决趣味赛马问题?| 非等值关联匹配问题
目录 0 问题描述 1 数据准备 2 问题分析 方法一:先分后合思想 方法2:非等值关联匹配 3 小结 0 问题描述 有一张赛马记录表,如下所示: create table RacingResults ( trace_id char(3) not null,race_date date not null, race_nbr int not null,win_name char(30) n…...
Vue Echarts报错Initialize failed: invalid dom解决方法
此问题是图表初始化时 找不到dom,以下是解决方法 1、不要用created(用mounted),created这时候还只是创建了实例,但模板还没挂载完成; created: 在模板渲染成 html 前调用,通常初始…...
MySQL—死锁
什么是死锁? 好比是两个事务都在等待对方释放锁,之后进行下一步操作,但是最后双方都没有释放资源,所以导致一直处于等待的状态。 但是服务器不会让死锁的状态一直持续,会关闭其中一个影响较小的事务(右边的…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
