【Python推导式秘籍】:一行代码的艺术,高效数据处理之道

文章目录

    • 🚋Python推导式
      • 🚀一、列表推导式
        • 🌈1. 了解推导式
        • ❤️2. 实践
        • 💥3. 总结
      • 🚀二、字典推导式
        • 🌈1. 了解字典推导式
        • ❤️2. 实践
        • 💥3. 总结
      • 🚀三、集合推导式
        • 🌈1. 了解集合推导式
        • ❤️2. 实践
        • 💥3. 总结
      • 🚀四、生成器推导式
        • 🌈1. 了解生成器推导式
        • ❤️2. 实践
        • 💥3. 总结

🚋Python推导式

在这里插入图片描述

🚀一、列表推导式

🌈1. 了解推导式

列表推导式(List Comprehensions)是Python中一种简洁、高效的创建列表的方法。它允许你用一行代码代替多行循环结构来生成新的列表。列表推导式的语法结构紧凑,易于阅读,适用于基于现有列表或者其他可迭代对象生成新列表的场景,特别是当新列表的每个元素都是通过对原列表元素进行某种变换或过滤得到时。

基本语法结构如下:

[expression for item in iterable if condition]
  • expression:是要应用到每个元素上的表达式,用于生成新列表中的元素。
  • item:是每次循环迭代中的当前元素。
  • iterable:是你要遍历的任何可迭代对象,如列表、元组、字符串等。
  • if condition:是可选的筛选条件,只有当条件为真时,对应的元素才会被包含在新列表中。
[ 表达式 for 变量 in 序列 [if 条件] ]
# 表达式 是需要进行的操作,可以包括各种数学运算、函数调用、字符串操作等;
# 变量 是循环体内部的循环变量,每次循环从 序列 中取出一个元素;
# 序列 是需要遍历的对象,可以是列表、元组、字符串等可迭代对象;
# if 条件 是可选的条件判断语句,用于对元素进行筛选。
❤️2. 实践

【示例1】:生成 0 到 9 的平方数列表

# 生成 0 到 9 的平方数列表:
squares = [x**2 for x in range(10)]
print(squares)   # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

在这里插入图片描述

【示例2】:获取一个列表中所有偶数的平方

# 获取一个列表中所有偶数的平方
numbers = [1, 2, 3, 4, 5, 6]
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(even_squares)   # [4, 16, 36]

在这里插入图片描述

【示例3】:将一个句子拆分成单词列表

# 将一个句子拆分成单词列表
sentence = "This is a sample sentence."
words = [word for word in sentence.split()]
print(words)   # ['This', 'is', 'a', 'sample', 'sentence.']

在这里插入图片描述

【示例4】:将data里面不与demo重复的数据进行添加进demo中

# 在多场景的情况下需要有特殊操作
demo = [1]
data = [1, 2, 3, 4, 5, 6]
# 将data里面不与demo重复的数据进行添加进demo中
[demo.append(i) for i in data if i not in demo]
# 这里之所以不进行变量接收是因为数据是添加到了demo列表里面了
print(demo)

在这里插入图片描述

💥3. 总结
使用列表推导式可以方便地生成一个列表,并且能够对其中的元素进行变换和过滤。
它是一种简洁、灵活的编程技巧,常用于数据处理和清洗等场景。在python代码执行的规则性能上面来看,其效率会更好一些;不过不建议处理过于复杂的结构,不利于代码维护及调试元组推导式及集合推导式 的操作与列表推导式相同

🚀二、字典推导式

🌈1. 了解字典推导式

字典推导式(Dictionary Comprehensions)是Python中用于创建字典的快捷方式,其工作原理类似于列表推导式,但用于生成字典。字典推导式让你能够以一种简洁、易读的方式从可迭代对象中创建字典。其基本结构允许你快速地对数据进行转换或过滤,并形成键值对。

基本语法结构如下:

{key_expression: value_expression for item in iterable if condition}
  • key_expression:为字典中每个键生成的表达式。
  • value_expression:为字典中每个值生成的表达式。
  • item:在迭代过程中当前的元素。
  • iterable:要遍历的任何可迭代对象。
  • if condition:可选条件,仅当条件为真时,当前元素才会被包含在新字典中。
# 基本语法
{ 键表达式: 值表达式 for 变量 in 序列 [if 条件] }# 键表达式 和 值表达式 分别是需要进行的操作,可以包括各种数学运算、函数调用、字符串操作等;
# 变量 是循环体内部的循环变量,每次循环从 序列 中取出一个元素;
# 序列 是需要遍历的对象,可以是列表、元组、字符串等可迭代对象;
if 条件 是可选的条件判断语句,用于对元素进行筛选。
❤️2. 实践

【示例1】:将一个字典中所有键转换为大写

# 将一个字典中所有键转换为大写
d = {'name': 'Alice', 'age': 25, 'email': 'alice@example.com'}
new_d = {key.upper(): value for key, value in d.items()}
print(new_d)   # {'NAME': 'Alice', 'AGE': 25, 'EMAIL': 'alice@example.com'}

在这里插入图片描述
【示例2】:将一个列表中的元素映射为它们本身及其长度

# 将一个列表中的元素映射为它们本身及其长度
words = ['apple', 'banana', 'pear']
word_lengths = {word: len(word) for word in words}
print(word_lengths)   # {'apple': 5, 'banana': 6, 'pear': 4}

在这里插入图片描述

【示例3】:倒转一个字典中的键值对

# 倒转一个字典中的键值对
d = {1: 'A', 2: 'B', 3: 'C'}
new_d = {value: key for key, value in d.items()}
print(new_d)   # {'A': 1, 'B': 2, 'C': 3}

在这里插入图片描述

# 构建字典key_1 = ['比赛', '友谊']
value_2 = [1, 2]# 字典推导式创建列表的话就只要一行搞定!!!
dict_2 = {key_1[i]: value_2[i] for i in range(len(key_1))}
print(dict_2)-------------------------------------------------------------------------------------------------
key_1 = ['快乐', '日拱一卒', 'hahha', 'dddd']
value = [18, 19]# dict1 = {key_1[i]: value[i] for i in range(len(key_1)) if len(key_1) == len(value)}num = len(key_1) - len(value)  # 查看长度差
if num > 0:  # 如果num大于0 说明键列表长度 大于 值列表长度# 将能够配对部分进行构建字典  ---- range(len(key_1)-num)dict1 = {key_1[i]: value[i] for i in range(len(key_1)-num)}# 将没有值的键部分进行构建#  len(key_1)-a  ---- 下标起始位#  len(key_1)  -------- 结束位置#  [dict1.setdefault(key_1[i], None) for i in range(len(key_1)-a, len(key_1))]for i in range(len(key_1)-a, len(key_1)):dict1[key_1[i]] = None
else:dict1 = {key_1[i]: value[i] for i in range(len(key_1))}
print(dict1)
💥3. 总结
使用字典推导式可以方便地生成一个字典,并且能够对其中的元素进行变换和过滤。
它是一种简洁、灵活的编程技巧,常用于数据处理和清洗等场景。

🚀三、集合推导式

🌈1. 了解集合推导式

集合推导式(Set Comprehensions)是Python中用来创建集合(set)的一种高效、简洁的语法结构。集合内的元素是唯一的,不重复。集合推导式的语法形式类似于列表推导式,但用花括号{}替代了方括号[]。这使得它非常适合于从可迭代对象中过滤出唯一值或执行集合运算。

基本语法结构如下:

{expression for item in iterable if condition}
  • expression: 表达式,计算结果作为集合中的元素。
  • item: 迭代变量,代表iterable中的每个元素。
  • iterable: 任何可迭代对象,如列表、元组、字符串等。
  • condition(可选): 筛选条件,只有当条件为真时,相应的expression才会被包含进结果集合中。
❤️2. 实践

【示例1】:数字的唯一集合

numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = {num for num in numbers}
print(unique_numbers)

在这里插入图片描述
【示例2】:只想保留偶数

numbers = [1, 2, 2, 3, 4, 4, 5]
even_numbers = {num for num in numbers if num % 2 == 0}
print(even_numbers)

在这里插入图片描述

💥3. 总结

集合推导式是Python中一种高级且紧凑的构造集合(set)的方式,它借鉴了列表推导式的概念,但生成的是一个不包含重复元素的集合。这种表达式非常适合于从可迭代对象中快速提取唯一值、执行条件过滤或转换数据,同时利用集合的特性来自动去除重复项。

🚀四、生成器推导式

🌈1. 了解生成器推导式

生成器推导式(Generator Expression)是Python中另一种高效的数据处理工具,它是列表推导式的lazy(惰性)版本,用于创建生成器对象。生成器不会立即计算出所有结果并存储在内存中,而是在每次迭代时按需生成下一个值,这对于处理大规模数据集时尤其有用,因为它可以显著节省内存。生成器推导式的语法结构与列表推导式相似,但使用圆括号而非方括号包围。

基本语法:

(expression for item in iterable if condition)
  • expression:生成的每个项的计算表达式。
  • item:在迭代期间考虑的当前项。
  • iterable:任何可迭代的对象,如列表、元组、字符串或其它可迭代数据结构。
  • condition(可选):一个过滤条件,仅当条件为真时,相应的项才被生成。

特点总结:

  1. 内存效率:生成器推导式在内存中不保存所有生成的值,而是在每次迭代时生成下一个值,这对于大数据处理至关重要。
  2. 惰性求值:直到调用(如通过迭代或转换为列表等操作),生成器才开始计算。
  3. 使用场景:适合处理大量数据流、实现无限序列或在内存限制下操作数据集。
  4. 功能强大:可以结合迭代、条件判断和函数调用,实现复杂的数据处理逻辑。
  5. 语法简洁:与列表推导式相似的紧凑语法,易于阅读和编写。
❤️2. 实践

【示例】:计算1到10的平方,但只包括偶数平方

# 计算1到10的平方,但只包括偶数平方
squares_gen = (x**2 for x in range(1, 11) if x % 2 == 0)for square in squares_gen:print(square, end=' ')

在这里插入图片描述
(x**2 for x in range(1, 11) if x % 2 == 0)定义了一个生成器推导式,它会按需计算并产生满足条件的偶数平方值。每次循环迭代时,生成器推进到下一个值,直到所有的元素都已生成完毕。

💥3. 总结

生成器推导式是Python中一种高级构造,用于简洁地创建迭代器对象。它类似于列表推导式,但不立即计算所有元素而是生成一个惰性求值的迭代器。当需要处理大量数据或无限序列时,这种方式尤其有效,因为它可以逐个产生项目,仅在需要时计算,从而节省内存。通过使用圆括号而非方括号定义,生成器推导式允许程序在遍历数据集合的同时保持低内存占用,非常适合于数据流处理和高效循环遍历场景。

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

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

相关文章

AI实践与学习5-AI解题场景RAG应用预研demo

背景 AI解题场景现状,教研测评文档:xxx 解题正确率仍需进一步提高,提示词优化方案基本无力o目前配置的易错题CoT示例支持的长度有限,后续题量大的时候配置具有局限性。某些英语翻译题型BAD CASE反映大模型的输出格式不太符合要求…

java:spring【AnnotationMetadata】的简单使用例子

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89435385 # 项目代码 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…

Linxu开机出现 Generating “/run/initramfs/rdsosreport.txt“解决方案

Linxu开机出现 Generating "/run/initramfs/rdsosreport.txt"解决方案 解决&#xff1a; 一、找这个-root结尾的文件也不一样。 大家可以用ls /dev/mapper查看到自己装的镜像对应的以-root结尾的文件是哪个。 二、所以我们运行的是&#xff1a;xfs_repair /dev/map…

Flutter 自定义日志模块设计

前言 村里的老人常说&#xff1a;“工程未动&#xff0c;日志先行。” 有效的利用日志&#xff0c;能够显著提高开发/debug效率&#xff0c;否则程序运行出现问题时可能需要花费大量的时间去定位错误位置和出错原因。 然而一个复杂的项目往往需要打印日志的地方比较多&#…

web错题(1)

action属性是form标签的必须属性&#xff0c;用于指定表单提交时表单数据将被发往哪里 dir能够指定文本显示方向的属性 可以产生下拉列表的标记时<select> multiple属性设为true&#xff0c;表示输入字段可以选择多个值 lable标签的for属性可以把lable绑定到另一个元…

vagrant putty错误的解决

使用Vagrant projects for Oracle products and other examples 新创建的虚机&#xff0c;例如vagrant-projects/OracleLinux/8。 用vagrant ssh可以登录&#xff1a; $ vagrant ssh > vagrant: Getting Proxy Configuration from Host...Welcome to Oracle Linux Server …

网络协议,OSI,简单通信,IP和mac地址

认识协议 1.讲故事 2004年&#xff0c;小明因为给他爹打电话&#xff08;座机&#xff09;费用太贵&#xff0c;所以约定一种信号&#xff0c;响一次是报平安&#xff0c;响两次是要钱&#xff0c;响三次才需要接通。 2.概念 协议&#xff1a;是一种约定&#xff0c;这种约…

【Android面试八股文】请描述new一个对象的流程

文章目录 请描述new一个对象的流程JVM创建对象的过程检查加载分配内存内存空间初始化设置对象初始化请描述new一个对象的流程 JVM创建对象的过程 当JVM遇到一条new指令时,它需要完成以下几个步骤: 类加载与检查内存分配 并发安全性内存空间初始化设置对象信息对象初始化下图…

10W大奖等你瓜分,OpenTiny CCF开源创新大赛报名火热启动!

OpenTiny CCF开源创新大赛正式启幕&#xff01; &#x1f31f;10万奖金&#xff0c;等你来战&#xff01; &#x1f31f; &#x1f465;无论你是独行侠还是团队英雄&#x1f465; 只要你对前端技术充满热情&#xff0c; 渴望在实战中磨砺技能&#xff0c; 那么&#xff0c…

抢占人工智能行业红利,前阿里巴巴产品专家带你15天入门AI产品经理

前言 当互联网行业巨头纷纷布局人工智能&#xff0c;国家将人工智能上升为国家战略&#xff0c;藤校核心课程涉足人工智能…人工智能领域蕴含着巨大潜力&#xff0c;早已成为业内共识。 面对极大的行业空缺&#xff0c;不少人都希望能抢占行业红利期&#xff0c;进入AI领域。…

文件系统小册(FusePosixK8s csi)【3 K8s csi】

文件系统小册&#xff08;Fuse&Posix&K8s csi&#xff09;【3 K8s csi】 往期文章&#xff1a; 文件系统小册&#xff08;Fuse&Posix&K8s csi&#xff09;【1 Fuse】文件系统小册&#xff08;Fuse&Posix&K8s csi&#xff09;【2 Posix标准】 0 核心知识…

liunx常见指令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 二、安装环境 1.租借服务器 2.下载安装 XShell 3.使用xshll登录服务器 三、Linux基础命令 一、文件和命令 ​编辑1、cd 命令 2、pwd 命令 3、ls 命令 4、cp 命令 …

邮件钓鱼--前置-攻击防范 7 看

目录 1、什么是 SPF&#xff1a; 2、如何判断 SPF&#xff1a; 3.邮件钓鱼防范&#xff1a;7 看 1、什么是 SPF&#xff1a; SPF 记录&#xff1a;原理、语法及配置方法简介 (zhetao.com) SPF记录详解_spf写法-CSDN博客 发件人策略框架&#xff08;Sender Policy Frame…

【多线程】Thread类及其基本用法

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. Java中多线程编程1.1 操作系统线程与Java线程1.2 简单使用多线程1.2.1 初步创建新线程代码1.2.2 理解每个…

springboot与flowable(8):候选人

一、流程绘制和部署 创建流程图 绘制如下流程图 给人事审批添加候选人 给经理审批添加两个候选人 保存导出流程图 部署流程定义 Testvoid contextLoads() {DeploymentBuilder deployment repositoryService.createDeployment();deployment.addClasspathResource("process…

《大道平渊》· 拾肆 —— 不要为不属于你负责的事情负责

《平渊》 拾肆 "客观世界如是观照&#xff0c;控制自己&#xff0c;不要介入因果。" 美国开国总统华盛顿说过, 不要干涉欧洲事务。 可是他的后任都不听, 于是纷纷卷入了无穷的麻烦之中。 不要为不属于你负责的事情负责。 别人的行为和你有什么关系&#xff1f; 就…

Linux-Https协议

文章目录 前言一、Https协议二、常见的加密方式对称加密非对称加密数据摘要&&数据指纹中间人攻击 三、Https的加密历程方案1-只使用对称加密方案2-只使用非对称加密方案3-双方都使用非对称加密方案4-非对称加密对称加密 前言 之前我们学习了Http协议&#xff0c;也试着…

官方文档 搬运 MAXMIND IP定位 mysql导入 简单使用

官方文档地址&#xff1a; 官方文档 文件下载 1. 导入mysql可能报错 Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 查看配置 SHOW GLOBAL VARIABLES LIKE %secure%;secure_file_priv 原来…

laravel版本≥ 8.1

laravel10 php ≥ 8.1 且 ≤ 8.3&#xff1f; 8.1 < php < 8.3PHP版本要求在 8.1 到 8.3 之间&#xff0c;包括这两个版本。具体来说&#xff1a;"≥ 8.1" 表示 PHP 的版本至少是 8.1&#xff0c;也就是说 8.1 及以上的版本都可以。 "≤ 8.3" 表示 P…

计算机组成原理学习 Part 1

计算机系统 组成 计算机系统 { 硬件 计算机的实体&#xff0c;如主机、外设等 软件 由具有各类特殊功能的信息&#xff08;程序&#xff09;组成 计算机系统 \begin{cases} 硬件 &\text 计算机的实体&#xff0c;如主机、外设等\\ 软件 &\text 由具有各类特殊功能的信…