目录
使用列表推导式复制一个列表
列表中的元素相乘
删除列表中的元素
使用dict()将两个列表转换为字典键值对
总结
首页 后端开发 Python教程 四种Python推导式开发技巧,让你的代码更高效

四种Python推导式开发技巧,让你的代码更高效

Apr 22, 2023 am 09:40 AM
python 技巧 开发

对于数据科学,Python通常被广泛地用于进行数据的处理和转换,它提供了强大的数据结构处理的函数,使数据处理更加灵活,这里说的“灵活性”是什么意思?

这意味着在Python中总是有多种方法来实现相同的结果,我们总是有不同的方法并且需要从中选择易于使用、省时并能更好控制的方法。

要掌握所有的这些方法是不可能的。所以这里列出了在处理任何类型的数据时应该知道的4个Python技巧。

四个Python推导式相关的开发技巧

列表推导式List Comprehension是创建列表的一种优雅且最符合python语言的方法。与for循环和if语句相比,列表推导式在基于现有列表的值创建新列表时语法要短得多。因此,让我们看看该特性如何获得列表的副本。

使用列表推导式复制一个列表

有时需要创建现有列表的副本。最简单的答案是.copy(),它允许您将一个列表的内容复制到另一个(新)列表。

例如,一个由整数组成的列表original_list。

original_list = [10,11,20,22,30,34]
登录后复制

可以简单地使用.copy()方法复制此列表。

duplicated_list = original_list.copy()
登录后复制

列表推导式可以得到完全相同的输出。复制列表是理解列表推导式的最佳案例。

看看下面这段代码。

duplicated_list = [item for item in original_list]
登录后复制

这里并不是说复制列表使用列表推导式更好,而是说对于介绍列表推导式的工作方式,这个案例是最好的。

接下来,让我们看看对列表的每个元素执行数学运算时,列表推导式如何使工作变得简单。

列表中的元素相乘

最简单或直接的乘法方法是使用乘法运算符,即*

例如,想用一个标量(即数字5)乘以列表中的每一项。这里肯定不能使用original_list*5,因为它将创建列表的5个副本。

在这个场景中,最好的答案是列表推导式,如下所示。

original_list = [10,11,20,22,30,34]
 multiplied_list = [item*5 for item in original_list]
 
 # Output
 [50, 55, 100, 110, 150, 170]
登录后复制

这里的操作并不局限乘以一个数字。可以对原始列表的每个元素执行复杂的操作。

例如,假设想计算每一项的平方根的立方,可以在一行中解决它。

multiplied_list = [math.sqrt(item)**3 for item in original_list]
 
 # Output
 [31.6227766016838,
36.4828726939094,
89.4427190999916,
103.18914671611546,
164.31676725154983,
198.25236442474025]
登录后复制

用于计算数字平方根的函数sqrt属于库math,因此在本例中需要在使用它之前导入它。

与上面所示的内置函数类似,还可以在列表的每个元素上使用用户定义的函数。

例如如下所示的简单函数。

def simple_function(item):
item1 = item*10
item2 = item*11
return math.sqrt(item1**2 + item2**2)
登录后复制

可以对列表的每一项应用这个用户定义的函数。

multiplied_list = [simple_function(item) for item in original_list]
 
 # Output
 [148.66068747318505,
163.52675622050356,
297.3213749463701,
327.0535124410071,
445.9820624195552,
505.4463374088292]
登录后复制

列表推导式在实际场景中甚至更有用。通常在分析任务中需要从列表中删除某种类型的元素,例如消0护着nan元素。列表推导式是完成这些任务的完美工具。

删除列表中的元素

根据特定条件筛选数据是选择所需数据集的常见任务之一,同样的逻辑也用于列表推导式中。

假设你有下面提到的数字列表。

original_list = [10, 22, -43, 0, 34, -11, -12, -0.1, 1]
登录后复制

你想要从这个列表中只保留正值。因此,从逻辑上讲,您希望只保留那些对条件项> 0求值为TRUE的项。

new_list = [item for item in original_list if item > 0]
 
 # Output
 [10, 22, 34, 1]
登录后复制

if子句用来删除负值。可以使用if子句应用任何条件来从列表中删除任何项。

例如,当想删除所有平方小于200的项时需要做的就是在列表综合中提到条件项**2 > 200,如下所示。

new_list = [item for item in original_list if item**2 > 200]
 
 # Output
 [22, -43, 34]
登录后复制

在处理真实的数据集时,过滤列表项的条件可能要复杂得多,这种方法既快又易于理解。

使用dict()将两个列表转换为字典键值对

有时需要从两个列表中的值创建字典。你可以使用字典推导式(dictionary comprehension) ,而不是一个一个地输入,这是创建字典的一种优雅而简洁的方法!

它的工作原理与列表推导式完全相似,唯一的区别是——创建一个列表推导式时,你将所有内容都包含在方括号中,例如[],而在字典推导式中,你将所有内容都包含在花括号中,例如{}。

假设有两个列表—字段和详细信息—如下所示。

fields = [‘name’, ‘country’, ‘age’, ‘gender’]
 details = [‘pablo’, ‘Mexico’, 30, ‘Male’]
登录后复制

一个简单的方法是使用像这样的字典推导式-

new_dict = {key: value for key, value in zip(fields, details)}
 
 # Output
 {'name': 'pablo', 'country': 'Mexico', 'age': 30, 'gender': 'Male'}
登录后复制

这里需要理解的重要是函数zip是如何工作的。

在Python中,zip函数接受可迭代对象,如字符串、列表或字典作为输入,返回它们聚合为元组。

因此,在本例中zip已经从列表fields和details中形成了每个项的对。当字典推导式中使用key: value时,只需将此元组解包为单独的键-值对。

当使用Python中内置的dict()构造函数(用于创建字典)时,这个过程甚至会变得更快,因为dict()比字典推导式至少快1.3倍!

所以我们需要将此构造函数与zip()函数一起使用,它的语法要简单得多——dict(zip(fields,details))

总结

正如我一开始提到的,Python非常灵活,因为有多种方法可以实现相同的结果。根据任务的复杂程度需要选择最好的方法来实现它。

我希望这篇文章能对你有用。如果有任何其他方法可以做到我在本文中提到的同样的事情,请告诉我。

以上是四种Python推导式开发技巧,让你的代码更高效的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

Python vs. JavaScript:社区,图书馆和资源 Python vs. JavaScript:社区,图书馆和资源 Apr 15, 2025 am 12:16 AM

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

docker原理详解 docker原理详解 Apr 14, 2025 pm 11:57 PM

Docker利用Linux内核特性,提供高效、隔离的应用运行环境。其工作原理如下:1. 镜像作为只读模板,包含运行应用所需的一切;2. 联合文件系统(UnionFS)层叠多个文件系统,只存储差异部分,节省空间并加快速度;3. 守护进程管理镜像和容器,客户端用于交互;4. Namespaces和cgroups实现容器隔离和资源限制;5. 多种网络模式支持容器互联。理解这些核心概念,才能更好地利用Docker。

vscode怎么在终端运行程序 vscode怎么在终端运行程序 Apr 15, 2025 pm 06:42 PM

在 VS Code 中,可以通过以下步骤在终端运行程序:准备代码和打开集成终端确保代码目录与终端工作目录一致根据编程语言选择运行命令(如 Python 的 python your_file_name.py)检查是否成功运行并解决错误利用调试器提升调试效率

Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

vscode 扩展是否是恶意的 vscode 扩展是否是恶意的 Apr 15, 2025 pm 07:57 PM

VS Code 扩展存在恶意风险,例如隐藏恶意代码、利用漏洞、伪装成合法扩展。识别恶意扩展的方法包括:检查发布者、阅读评论、检查代码、谨慎安装。安全措施还包括:安全意识、良好习惯、定期更新和杀毒软件。

centos如何安装nginx centos如何安装nginx Apr 14, 2025 pm 08:06 PM

CentOS 安装 Nginx 需要遵循以下步骤:安装依赖包,如开发工具、pcre-devel 和 openssl-devel。下载 Nginx 源码包,解压后编译安装,并指定安装路径为 /usr/local/nginx。创建 Nginx 用户和用户组,并设置权限。修改配置文件 nginx.conf,配置监听端口和域名/IP 地址。启动 Nginx 服务。需要注意常见的错误,如依赖问题、端口冲突和配置文件错误。性能优化需要根据具体情况调整,如开启缓存和调整 worker 进程数量。

vscode是什么 vscode是干什么用的 vscode是什么 vscode是干什么用的 Apr 15, 2025 pm 06:45 PM

VS Code 全称 Visual Studio Code,是一个由微软开发的免费开源跨平台代码编辑器和开发环境。它支持广泛的编程语言,提供语法高亮、代码自动补全、代码片段和智能提示等功能以提高开发效率。通过丰富的扩展生态系统,用户可以针对特定需求和语言添加扩展程序,例如调试器、代码格式化工具和 Git 集成。VS Code 还包含直观的调试器,有助于快速查找和解决代码中的 bug。

See all articles