Python推导式大全与实战:精通列表、字典、集合和生成器推导式【第115篇—python:推导式】

Python推导式大全与实战:精通列表、字典、集合和生成器推导式

Python语言以其简洁、优雅的语法而闻名,其中推导式是其独特之处之一。推导式是一种在一行代码中构建数据结构的强大方式,它涵盖了列表、字典、集合和生成器。本篇博客将全面介绍Python中的推导式,并通过实战演示展示其强大功能。

IMG_20231006_183505

1. 列表推导式

列表推导式是Python中最常见的推导式之一,用于快速创建列表。其语法结构如下:

new_list = [expression for item in iterable if condition]

实例: 通过列表推导式生成1到10的平方数列表。

squares = [x**2 for x in range(1, 11)]
print(squares)

代码解析: 在这个例子中,我们使用range(1, 11)生成1到10的数字序列,并通过列表推导式计算每个数字的平方,最终得到squares列表。

2. 字典推导式

字典推导式用于创建字典,其语法结构为:

new_dict = {key_expression: value_expression for item in iterable if condition}

实例: 通过字典推导式生成数字与其平方的映射。

squares_dict = {x: x**2 for x in range(1, 6)}
print(squares_dict)

代码解析: 在这个例子中,我们使用range(1, 6)生成1到5的数字序列,并通过字典推导式创建了一个字典,其中键为数字,值为对应数字的平方。

3. 集合推导式

集合推导式类似于列表推导式,但用于创建集合。其语法结构为:

new_set = {expression for item in iterable if condition}

实例: 通过集合推导式生成1到10的奇数集合。

odd_numbers = {x for x in range(1, 11) if x % 2 != 0}
print(odd_numbers)

代码解析: 在这个例子中,我们使用range(1, 11)生成1到10的数字序列,并通过集合推导式筛选出奇数,最终得到odd_numbers集合。

4. 生成器推导式

生成器推导式是一种懒加载的推导式,用于生成一个生成器对象。其语法结构为:

new_generator = (expression for item in iterable if condition)

实例: 通过生成器推导式生成1到10的平方数生成器。

squares_generator = (x**2 for x in range(1, 11))
for square in squares_generator:print(square)

代码解析: 在这个例子中,我们使用生成器推导式创建了一个生成器对象,并通过循环打印每个平方数。生成器是一种高效利用内存的方式,逐个生成元素而不一次性存储所有元素。

通过这些推导式,你可以在Python中更加高效地处理数据结构,减少代码量,提高可读性。深入理解这些推导式的用法将为你的Python编程之旅增添更多的技巧和便利。

5. 嵌套推导式

Python推导式还支持嵌套,可以在一个推导式中使用多个循环和条件语句,构建更为复杂的数据结构。

实例: 通过嵌套列表推导式创建一个九九乘法表。

multiplication_table = [[i * j for j in range(1, 10)] for i in range(1, 10)]
for row in multiplication_table:print(row)

代码解析: 在这个例子中,我们使用嵌套的列表推导式创建了一个包含九九乘法表的二维列表。外层循环遍历1到9的数字,内层循环遍历1到9的数字,并通过表达式i * j计算乘积。

6. 条件表达式

推导式中的条件表达式允许根据条件选择不同的表达式。

实例: 通过条件表达式在列表推导式中筛选奇数和偶数。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
even_odd_classification = ["Even" if x % 2 == 0 else "Odd" for x in numbers]
print(even_odd_classification)

代码解析: 在这个例子中,我们使用条件表达式判断数字是奇数还是偶数,然后通过列表推导式生成一个包含奇偶分类的列表。

7. 推导式的性能考虑

虽然推导式提供了紧凑的语法,但在处理大规模数据时,需要注意性能问题。生成器推导式通常更适合处理大型数据集,因为它们采用惰性加载的方式,逐个生成元素而不在内存中存储所有元素。

实例: 使用生成器推导式生成斐波那契数列。

fibonacci_generator = (fibonacci(n) for n in range(10))def fibonacci(n):if n <= 1:return nelse:return fibonacci(n-1) + fibonacci(n-2)for number in fibonacci_generator:print(number)

代码解析: 在这个例子中,我们使用生成器推导式生成斐波那契数列的前10个元素。由于斐波那契数列的计算涉及递归,使用生成器推导式可以有效避免内存溢出问题。

通过以上介绍的不同类型的推导式和实际示例,相信你已经对Python中的推导式有了更深入的理解。这些强大的工具使得在Python中处理数据结构变得更加轻松和高效。在实际项目中,合理运用推导式能够提高代码的可读性和性能。

8. 使用推导式进行数据过滤和转换

推导式不仅可以用于创建数据结构,还可以用于数据的过滤和转换,使得数据处理更为灵活。

实例: 通过列表推导式过滤出长度大于等于3的单词。

words = ["apple", "banana", "pear", "kiwi", "orange"]
filtered_words = [word for word in words if len(word) >= 3]
print(filtered_words)

代码解析: 在这个例子中,我们使用列表推导式遍历单词列表,并通过条件表达式len(word) >= 3筛选出长度大于等于3的单词,最终得到filtered_words列表。

9. 推导式与函数结合

推导式可以与函数结合,进一步提高代码的简洁性和可读性。

实例: 使用列表推导式和函数计算列表中每个元素的平方根。

import mathnumbers = [4, 9, 16, 25, 36]
square_roots = [math.sqrt(num) for num in numbers]
print(square_roots)

代码解析: 在这个例子中,我们使用math.sqrt()函数计算每个数字的平方根,并通过列表推导式生成包含平方根的列表。

10. 推导式的灵活运用

推导式可以根据实际需求进行灵活运用,组合使用不同类型的推导式。

实例: 使用列表推导式和集合推导式创建一个包含数字平方和的集合。

numbers = [1, 2, 3, 4, 5]
squares_set = {x**2 for x in numbers}
print(squares_set)

代码解析: 在这个例子中,我们首先使用列表推导式生成数字的平方列表,然后通过集合推导式将其转化为集合,去除重复的元素,最终得到squares_set集合。

通过这些实例,你可以更全面地理解和运用Python推导式,使得代码更为简洁、可读且高效。推导式是Python语言中的一项强大特性,善用它将使你的代码更加优雅和易于维护。

11. 推导式在文件处理中的应用

推导式在文件处理中也能发挥巨大作用,例如读取文件内容并进行处理。

实例: 通过文件读取和列表推导式获取文件中所有行的长度。

file_path = 'sample.txt'# 读取文件并获取每行的长度
line_lengths = [len(line) for line in open(file_path)]print(line_lengths)

代码解析: 在这个例子中,我们使用列表推导式一行代码完成了文件读取和每行长度的获取。open(file_path)打开文件,len(line)计算每行的长度,并将结果存储在line_lengths列表中。

12. 推导式处理多层嵌套数据结构

推导式在处理多层嵌套的数据结构时表现得尤为出色。

实例: 使用嵌套列表推导式将二维列表扁平化。

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]# 扁平化嵌套列表
flattened_list = [num for row in matrix for num in row]print(flattened_list)

代码解析: 在这个例子中,通过嵌套列表推导式,我们将二维列表matrix扁平化为一个一维列表flattened_list。外层循环遍历行,内层循环遍历行中的元素,从而快速构建扁平化的列表。

13. 推导式的错误处理

推导式中也可以使用异常处理机制,使得代码更加健壮。

实例: 使用列表推导式过滤掉非整数元素。

mixed_data = [1, 2, 'three', 4, 'five', 6]# 过滤非整数元素
filtered_integers = [num for num in mixed_data if isinstance(num, int)]print(filtered_integers)

代码解析: 在这个例子中,我们使用isinstance()函数检查元素是否为整数,通过列表推导式过滤出整数元素,避免了非整数元素引起的错误。

通过这些例子,你可以看到推导式在不同场景中的广泛应用,从文件处理到多层嵌套数据结构的处理,甚至是错误处理方面都能展现其强大的表达能力。合理运用推导式,可以让你的代码更加简洁、高效,并提高代码的可读性。### 14. 推导式在字典操作中的妙用

推导式同样在字典操作中展现出其灵活性和便捷性。

实例: 使用字典推导式从两个列表创建字典。

keys = ['name', 'age', 'city']
values = ['Alice', 25, 'New York']# 创建字典
data_dict = {key: value for key, value in zip(keys, values)}print(data_dict)

代码解析: 在这个例子中,我们使用zip()函数将两个列表打包成元组,然后通过字典推导式创建字典。这种方式非常适合从不同来源的数据构建字典。

15. 推导式的可读性和维护性

虽然推导式可以让代码更为紧凑,但在一些复杂的场景下,过度使用可能导致代码难以理解。因此,在实际应用中,要根据情况权衡代码的可读性和紧凑性。

实例: 使用列表推导式生成斐波那契数列的偶数项,并通过注释提高可读性。

fibonacci_numbers = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]# 通过列表推导式筛选斐波那契数列的偶数项
even_fibonacci = [num for num in fibonacci_numbers if num % 2 == 0]print(even_fibonacci)

代码解析: 在这个例子中,我们使用列表推导式生成斐波那契数列的偶数项,同时通过注释提供了对代码的解释,提高了可读性。

16. 推导式在数据分析中的应用

推导式在数据分析中常被用于快速处理和转换数据。

实例: 使用集合推导式去除列表中的重复元素。

data = [1, 2, 3, 2, 4, 5, 3, 6, 7]# 去除重复元素
unique_data = list({x for x in data})print(unique_data)

代码解析: 在这个例子中,我们使用集合推导式创建了一个集合,自动去除了列表中的重复元素,然后通过list()将集合转换为列表。

通过这些例子,你可以看到推导式在字典操作、可读性和维护性、以及数据分析中的广泛应用。掌握这些用法,可以使得你在实际编码中更加得心应手,提高代码效率和可维护性。

17. 推导式在异步编程中的运用

在异步编程中,推导式同样能够简化代码,提高效率。

实例: 使用列表推导式和异步函数创建异步任务列表。

import asyncioasync def async_task(item):# 异步任务,这里简单地将数字平方return item**2# 创建异步任务列表
async_tasks = [async_task(num) for num in range(5)]# 执行异步任务
results = asyncio.run(asyncio.gather(*async_tasks))print(results)

代码解析: 在这个例子中,我们使用列表推导式创建了一个包含异步任务的列表async_tasks,然后通过asyncio.gather()执行这些异步任务,最终得到异步任务的结果列表。

18. 推导式的高级用法

推导式还支持一些高级的用法,如条件表达式的嵌套、多个for子句的组合等。

实例: 使用条件表达式的嵌套在列表推导式中实现FizzBuzz问题。

result = ["Fizz" if i % 3 == 0 else "Buzz" if i % 5 == 0 else i for i in range(1, 16)]
print(result)

代码解析: 在这个例子中,我们使用了条件表达式的嵌套,根据FizzBuzz问题的规则生成了一个包含结果的列表。

19. 推导式的可读性与Lambda函数结合

Lambda函数可以与推导式结合,进一步简化代码。

实例: 使用Lambda函数和列表推导式计算列表中每个元素的平方。

numbers = [1, 2, 3, 4, 5]
squares = [(lambda x: x**2)(num) for num in numbers]
print(squares)

代码解析: 在这个例子中,我们使用了Lambda函数,通过列表推导式计算了每个元素的平方,Lambda函数在这里用于定义简单的平方计算函数。

20. 推导式的限制与适用场景

虽然推导式具有强大的功能,但在某些情况下可能并不是最佳选择。当推导式变得复杂难以理解时,可以考虑使用传统的循环结构。

实例: 使用传统循环结构计算列表中每个元素的阶乘。

numbers = [1, 2, 3, 4, 5]
factorials = []
for num in numbers:result = 1for i in range(1, num + 1):result *= ifactorials.append(result)print(factorials)

代码解析: 在这个例子中,我们使用传统的嵌套循环结构计算了列表中每个元素的阶乘。虽然推导式也能实现,但使用循环结构可能更易理解。

通过这些例子,你可以更深入地理解推导式的高级用法,以及在一些特殊场景下的限制。优雅地使用推导式和其他Python语言特性,能够提高代码的可读性和编程效率。

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

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

相关文章

解决 MySQL 未运行但锁文件存在的问题

查看mysql状态时&#xff0c;显示错误信息"ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists"。 解决步骤 1、检查 MySQL 进程是否正在运行 在继续之前&#xff0c;我们首先需要确定 MySQL 进程是否正在运行。我们可以使用以下命令检查…

BUGKU bp

打开环境&#xff0c;他提示了弱密码top1000&#xff0c;随便输入密码123抓包爆破 发现长度都一样&#xff0c;看一下响应发现一段js代码&#xff0c;若r值为{code: bugku10000}&#xff0c;则会返回错误&#xff0c;通过这一句“window.location.href success.php?coder.cod…

JAVAEE初阶 JVM(二)

垃圾回收和双亲委派模型 1.双亲委派模型2.垃圾回收机制(1) 识别垃圾1.引用计数2.可达性分析 (2) 销毁垃圾1.标记清除2.复制算法3.标记整理 3.分代回收 1.双亲委派模型 描述了如何查找.class文件的策略. 同时JVM中有专门进行类加载的操作,有一个模块,叫做类加载器. 上述就是为了…

数据库-第二/三章 关系数据库和标准语言SQL【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下计数据库系统概论中的重点概念&#xff0c;以供大家期末复习和考研复习的时候使用。 参考资料是王珊老师和萨师煊老师的数据库系统概论(第五版)。 文章目录 前言第二、三章 关系数据库和标准语言SQL2.1 关系2…

论文阅读-CheckFreq:频繁、精细的DNN检查点操作。

论文名称&#xff1a;CheckFreq: Frequent, Fine-Grained DNN Checkpointing. 摘要 训练深度神经网络(DNNs)是一项资源密集且耗时的任务。在训练过程中&#xff0c;模型在GPU上进行计算&#xff0c;重复地学习权重&#xff0c;持续多个epoch。学习到的权重存在GPU内存中&…

视频在线压缩

video2edit 一款免费的在线视频编辑软件&#xff0c;可以进行视频合并、视频剪辑、视频压缩以及转换视频格式等。 链接地址&#xff1a;在线视频编辑器和转换器 - 编辑&#xff0c;转换和压缩视频文件 打开视频压缩页面&#xff0c;上传想要压缩视频&#xff0c;支持MP4&…

智能边缘小站 CloudPond(低延迟、高带宽和更好的数据隐私保护)

智能边缘小站 CloudPond(低延迟、高带宽和更好的数据隐私保护) 边缘小站的主要功能是管理用户在线下部署的整机柜设施&#xff0c;一个边缘小站关联一个华为云指定的区域和一个用户指定的场地&#xff0c;相关的资源运行状况监控等。 边缘计算 迈入5G和AI时代&#xff0c;新…

Matlab 机器人工具箱 Link类

文章目录 1 Link类1.1 机械臂Link类1.2 构造函数1.3 信息/显示方法1.4 转换方法1.5 操作方法1.6 测试方法1.7 重载操作1.8 属性(读/写)1.9 例子2 Link.Link2.1 创建机器人连杆对象2.2 OPTIONS2.3 注意2.4 旧语法2.5 例子3 Link的其他函数3.1 Link.A3.2 Link.char3.3 Link.displ…

RFID(Radio Frequency Identification)技术笔记

一、RFID的介绍 RFID&#xff0c;全称为Radio Frequency Identification&#xff0c;即射频识别技术&#xff0c;也常被称为电子标签或无线射频识别。它是一种非接触式的自动识别技术&#xff0c;通过射频信号自动识别目标对象并获取相关数据&#xff0c;识别过程无需人工干预&…

Netty01NIO

NIO基础 NIO &#xff1a;non-blocking io 非阻塞 IO 笔记 www.zgtsky.top 网课&#xff1a;黑马Netty 三大组件 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以…

电子电气架构——汽车DoIP诊断通信建立流程

电子电气架构——汽车DoIP诊断通信建立流程 我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会…

Infineon_TC264智能车代码初探及C语言深度学习(一)

本篇文章记录我在智能车竞赛中&#xff0c;对 Infineon_TC264 这款芯片的底层库函数的学习分析。通过深入地对其库函数进行分析&#xff0c;C语言深入的知识得以再次在编程中呈现和运用。故觉得很有必要在此进行记录一下。 目录 ​编辑 一、代码段 1、枚举类型 2、结构体 …

ChatGPT支持下的PyTorch机器学习与深度学习技术应用

近年来&#xff0c;随着AlphaGo、无人驾驶汽车、医学影像智慧辅助诊疗、ImageNet竞赛等热点事件的发生&#xff0c;人工智能迎来了新一轮的发展浪潮。尤其是深度学习技术&#xff0c;在许多行业都取得了颠覆性的成果。另外&#xff0c;近年来&#xff0c;Pytorch深度学习框架受…

WordPress分类目录ID怎么看?如何查找WordPress标签ID?

在WordPress网站中&#xff0c;我们需要判断某篇文章是否属于某个分类目录&#xff0c;或者是否拥有某个标签&#xff0c;那么就需要用到分类目录ID和标签ID&#xff0c;那么WordPress分类目录ID怎么看&#xff1f;如何查找WordPress标签ID&#xff1f;下面boke112百科就跟大家…

SQL 术语:Join 中的 Build 和 Probe 是什么意思?

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

数字化转型导师坚鹏:证券公司数字化转型战略、方法与案例

证券公司数字化转型战略、方法与案例 课程背景&#xff1a; 数字化转型背景下&#xff0c;很多机构存在以下问题&#xff1a; 不清楚证券公司数字化转型的发展战略&#xff1f; 不知道证券公司数字化转型的核心方法&#xff1f; 不知道证券公司数字化转型的成功案例&am…

nginx 反向代理 与缓存功能

一 理论说明 &#xff08;一&#xff09;反向代理简介 反向代理&#xff1a;reverse proxy&#xff0c;指的是代理外网用户的请求到内部的指定的服务器&#xff0c;并将数据返回给用户的一种方式&#xff0c;这是用的比较多的一种方式。 即 代理服务机 Nginx 除了可以在企…

概率基础——多元正态分布

概率基础——多元正态分布 介绍 多元正态分布是统计学中一种重要的多维概率分布&#xff0c;描述了多个随机变量的联合分布。在多元正态分布中&#xff0c;每个随机变量都服从正态分布&#xff0c;且不同随机变量之间可能存在相关性。本文将以二元标准正态分布为例&#xff0…

图神经网络实战——基于DeepWalk创建节点表示

图神经网络实战——基于DeepWalk创建节点表示 0. 前言1. Word2Vec1.1 CBOW 与 skip-gram1.2 构建 skip-gram 模型1.3 skip-gram 模型1.4 实现 Word2Vec 模型 2. DeepWalk 和随机行走3. 实现 DeepWalk小结系列链接 0. 前言 DeepWalk 是机器学习 (machine learning, ML) 技术在图…

matlab阶段学习小节1

数组排序 fliplr()实现数组倒序&#xff0c;但不对大小进行排序&#xff0c;只是元素位置掉头。 要想实现大小倒序排列&#xff0c;可以先sort()实现正序排列&#xff0c;再用fliplr倒一下 %数组运算 %矩阵 %xAb的解xb/A;(矩阵) %右除运算A/B&#xff0c;左矩阵为被除数&a…