当前位置: 首页 > news >正文

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() 可以有效简化多条件检查,避免多重 orany())和 andall())语句的使用。

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实现浏览器播放音频流并合成音频

一、语音合成支持流式返回&#xff0c;通过WS可以实时拿到音频流&#xff0c;那么我们如何在VUE项目中实现合成功能呢。语音合成应用非常广泛&#xff0c;如商家广告合成、驾校声音合成、新闻播报、在线听书等等场景都会用到语音合成。 二、VUE下实现合成并使用浏览器播放代码…...

C#绘制常用工业控件(仪表盘,流动条,开关等)

目录 1&#xff0c;使用Graphics绘制Toggle。 效果&#xff1a; 测试代码&#xff1a; Toggle控件代码&#xff1a; 2&#xff0c;使用Graphics绘制Switch。 效果&#xff1a; 测试代码&#xff1a; Switch控件代码&#xff1a; 3&#xff0c;使用Graphics绘制PanelHe…...

Ps:颜色模型、色彩空间及配置文件

颜色模型、色彩空间和配置文件是处理颜色的核心概念。它们虽然互相关联&#xff0c;但各自有不同的功能和作用。 通过理解这些概念及其关系&#xff0c;Photoshop 用户可以更好地管理和优化图像处理流程&#xff0c;确保颜色在不同设备和应用中的一致性和准确性。 颜色模型 Col…...

llvm后端之td定义指令信息

llvm后端之td定义指令信息 引言1 定义指令2 定义Operand3 定义SDNode4 PatFrags4.1 ImmLeaf4.2 PatLeaf 5 ComplexPattern6 谓词条件7 理解dag 引言 llvm后端通过td定义指令信息&#xff0c;并通过dag匹配将IR节点转换为平台相关的指令。 1 定义指令 td通过class Instructio…...

战地机房集装箱数据中心可视化:实时监控与管理

通过图扑可视化技术实时监控战地机房集装箱数据中心的各项运行指标和环境参数&#xff0c;提高部署效率和设备管理能力&#xff0c;确保数据中心稳定运行。...

Linux入门攻坚——31、rpc概念及nfs和samba

NFS&#xff1a;Network File System 传统意义上&#xff0c;文件系统在内核中实现 RPC&#xff1a;函数调用&#xff08;远程主机上的函数&#xff09;&#xff0c;Remote Procedure Call protocol 一部分功能由本地程序完成 另一部分功能由远程主机上的 NFS本质…...

内网穿透的应用-本地化部署Elasticsearch平替工具OpenObserve并实现无公网IP远程分析数据

文章目录 前言1. 安装Docker2. Docker镜像源添加方法3. 创建并启动OpenObserve容器4. 本地访问测试5. 公网访问本地部署的OpenObserve5.1 内网穿透工具安装5.2 创建公网地址 6. 配置固定公网地址 前言 本文主要介绍如何在Linux系统使用Docker快速本地化部署OpenObserve云原生可…...

哈希表 and 算法

哈希表&#xff1a; 哈希表&#xff08;Hash table&#xff09;&#xff0c;也被称为散列表&#xff0c;是一种根据关键码值&#xff08;Key value&#xff09;而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录&#xff0c;以加快查找的速度。这个映射…...

Comsol 共用声固耦合边界与热粘性声学边界的亥姆霍兹腔体超材料板精准隔声设计

声子晶体可分为局域共振型声子晶体和布拉格散射型声子晶体, 由于布拉格声子晶体需要的结构尺寸往往很大, 不便于实际应用; 而基于局域共振型机理的声子晶体能够实现“小体积控制大波长”, 因而有更加广泛的应用, 其中利用Helmholtz共鸣腔是局域共振型机理的典型应用, 近年来, H…...

Linux系统本地化部署Dify并安装Ollama运行llava大语言模型详细教程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

极光出席深圳国际人工智能展并荣获“最具投资价值人工智能奖”

9月8-10日&#xff0c;由深圳市工业和信息化局、深圳市发展和改革委员会、深圳市科技创新局、深圳市政务服务和数据管理局、深圳市中小企业服务局共同指导&#xff0c;深圳市人工智能行业协会主办的第五届深圳国际人工智能展正式开幕。作为中国领先的客户互动和营销科技服务商&…...

人工智能领域的性能指的是什么

目录 1. 准确性&#xff08;Accuracy&#xff09; 2. 精确率与召回率&#xff08;Precision & Recall&#xff09; 3. F1分数 4. 运行时间与延迟&#xff08;Latency&#xff09; 5. 吞吐量&#xff08;Throughput&#xff09; 6. 可扩展性&#xff08;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&#xff0c;以下是解决方法 1、不要用created&#xff08;用mounted&#xff09;&#xff0c;created这时候还只是创建了实例&#xff0c;但模板还没挂载完成&#xff1b; created&#xff1a; 在模板渲染成 html 前调用&#xff0c;通常初始…...

MySQL—死锁

什么是死锁&#xff1f; 好比是两个事务都在等待对方释放锁&#xff0c;之后进行下一步操作&#xff0c;但是最后双方都没有释放资源&#xff0c;所以导致一直处于等待的状态。 但是服务器不会让死锁的状态一直持续&#xff0c;会关闭其中一个影响较小的事务&#xff08;右边的…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...