【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.rhkb.cn/news/350338.html

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

相关文章

Sobel边缘检测

声明:学习过程中的知识总结,欢迎批评指正。 基本原理 灰度处理:边缘检测是基于图像亮度变化实现的,而图像的亮度信息通过灰度图像体现,因此需要把彩色图像转换成灰度图像。平滑处理:可以使用高斯滤波等滤…

SUSTAINABILITY,SCIESSCI双检期刊还能投吗?

本期,小编给大家介绍的是一本MDPI出版社旗下SCIE&SSCI双检“毕业神刊”——SUSTAINABILITY。据悉,早在2024年1月,ElSEVIER旗下的Scopus数据库已暂停收录检索期刊SUSTAINABILITY所发表文章,同时重新评估是否继续收录该期刊。随…

【数据结构】——常见排序

文章目录 一、 冒泡排序二、 选择排序三、插入排序四、 快速排序1. hoare版本2. 优化版本3. 前后指针法4. 非递归版本 五、 堆排序六、 希尔排序七、 归并排序1. 递归版本2. 非递归版本 八、 计数排序 在开始之前先准备一个交换数据的函数,排序会经常用到 //交换位置…

【博士每天一篇文献-算法】Progressive Neural Networks

阅读时间:2023-12-12 1 介绍 年份:2016 作者:Andrei A. Rusu,Neil Rabinowitz,Guillaume Desjardins,DeepMind 研究科学家,也都是EWC(Overcoming catastrophic forgetting in neural networks)算法的共同作者。 期刊: 未录用&am…

Nginx配置详细解释:(6)实现反向代理服务器,动静分离,负载均衡

目录 单台反向代理 proxy_pass后面加不加/的问题: 反向代理动静分离 反向代理负载均衡 作为代理服务器是当客户端访问代理服务器时,代理服务器代理客户端去访问真实web服务器。proxy_pass; 用来设置将客户端请求转发给的后端服务器的主机。 需要模块…

【Unity学习笔记】第十八 基于物理引擎的日月地系统简单实现

转载请注明出处: https://blog.csdn.net/weixin_44013533/article/details/139701843 作者:CSDN|Ringleader| 目录 目标数学理论资源准备数据准备代码实现Unity准备效果展示注意事项后记 目标 目标:利用Unity的物理引擎实现 “日地月三体系统” 。 效果…

UC Berkeley简介以及和Stanford的区别与联系

UC Berkeley Source: Google Map 中文版 UC Berkeley,全称University of California, Berkeley,是一所位于美国加利福尼亚州伯克利市的世界知名公立研究型大学。以下是关于UC Berkeley的详细介绍: 学术声誉和排名 学术声誉: U…

VisionOS的未来愿景:苹果VisionPro创业者的愿望清单

随着苹果公司在增强现实(AR)领域的不断探索,VisionPro作为其前沿产品,已经开始展现出改变我们与数字世界互动方式的潜力。作为一名VisionPro创业者,对未来VisionOS的更新充满了期待,并提出了一系列愿望清单,这些愿望不仅代表了个人的需求,也反映了用户社区对苹果AR生态的…

LaDM3IL:多实例学习用于免疫库分类

一个人的免疫组库由某一时间点的大量适应性免疫受体组成,代表了该个体的适应性免疫状态。免疫组库分类和相关受体识别有可能为新型疫苗的开发做出贡献。大量的实例对免疫组库分类提出了挑战,这可以表述为大规模多实例学习 (MMIL,Massive Mult…

自动驾驶场景下TCP协议参数优化调整案例分享

RTT 往返时间,从tcp协议栈决定发包,到收到回包的时间。 包含本地驱动,网卡硬件,网线,交换机,收包方处理的耗时。需注意如果开了delayed ack,协议栈未做特殊处理(默认没做&#xff…

Photoshop中颜色与色调的调整

Photoshop中颜色与色调的调整 Photoshop中的颜色模式RGB模式灰度模式位图模式索引模式CMYK模式Lab模式 Photoshop中的颜色/色调调整命令颜色/色调调整命令的分类亮度/对比度调整命令色阶命令曲线命令曝光度命令自然饱和度命令色相/饱和度命令色彩平衡命令照片滤镜调整命令通道混…

LLVM Cpu0 新后端10

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

[RL9] Rocky Linux 9.4 搭载 PG 16.1

副标题:Rocky Linux 9.4 升级实录,及 PG 16 相关内容 背景 Rocky Linux 9.4 (以下简称 RL) 于5月9日正式发布,本文记录了从 RL 9.3 升级到 9.4 的过程,以及升级前后的一些变化。 之前介绍过 RL 9 的相关内容,请戳&…

windows环境如何运行python/java后台服务器进程而不显示控制台窗口

1.通常我们在windows环境下使用Java或Python语言编写服务器程序,都希望他在后台运行,不要显示黑乎乎的控制台窗口: 2.有人写了一个bat文件: cd /d D:\lottery\server && python .\main.py 放到了开机自启动里,可是开机的…

MT2093 活动安排

贪心策略&#xff1a; 每次选择结束时间最早的活动 代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5e5 10; int n; struct pp {int a, b; } p[N]; bool cmp(pp x, pp y) {return x.b < y.b; } int ans 0;int main() {cin >>…

数据结构(DS)学习笔记(二):数据类型与抽象数据类型

参考教材&#xff1a;数据结构C语言版&#xff08;严蔚敏&#xff0c;吴伟民编著&#xff09; 工具&#xff1a;XMind、幕布、公式编译器 正在备考&#xff0c;结合自身空闲时间&#xff0c;不定时更新&#xff0c;会在里面加入一些真题帮助理解数据结构 目录 1.1数据…

学习资料分析

学习资料分析 速算运算 √截位直除分数比较等比修正其他速算方法基期与现期基本概念求基期求现期增长率与增长量增长相关统计术语求一般增长率比较一般增长率增长量比重比重相关公式求比重平均数倍数间隔增长乘积增长率年增长率混合增长率资料分析:主要测查报考者对文字、数字…

【数据的增值之路】全生命周期的数据演化过程

引言&#xff1a;随着云计算、大数据、人工智能、区块链等新一代信息技术的快速发展&#xff0c;数据已经成为推动经济增长的重要生产要素。数据量的爆炸式增长&#xff0c;为挖掘数据价值、推动数字经济发展提供了丰富的资源基础。重要概念解析&#xff1a; 数据经济&#xf…

Elasticsearch + Mongodb实现海量数据的检索

1. ES用来检索关键字&#xff08;分词&#xff09;的获得文档id 2.文档存储在分布式存储数据库Mongodb

企业化运维(3)_PHP、nginx结合php-fpm、memcache、openresty、goaccess日志可视化

###1.PHP源码编译### 解压PHP压缩包&#xff0c;切入PHP目录&#xff0c;进行configure-->make-->make installd三部曲 [rootserver1 ~]# yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel ##依赖性 [rootserver1 ~]# yum…