0

0

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

WBOY

WBOY

发布时间:2023-04-22 09:40:08

|

1448人浏览过

|

来源于51CTO.COM

转载

对于数据科学,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)

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

百宝箱
百宝箱

百宝箱是支付宝推出的一站式AI原生应用开发平台,无需任何代码基础,只需三步即可完成AI应用的创建与发布。

下载
multiplied_list = [simple_function(item) for item in original_list]
 
 # Output
 [148.66068747318505,
163.52675622050356,
297.3213749463701,
327.0535124124410071,
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速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1567

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

150

2025.10.17

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1567

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 13.3万人学习

Rust 教程
Rust 教程

共28课时 | 6.8万人学习

Vue 教程
Vue 教程

共42课时 | 9.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号