百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

用列表推导式编写更优秀的Python代码

liebian365 2025-01-11 14:51 15 浏览 0 评论


本教程演示如何使用Python的列表推导式,它为开发者提供了一种编写更高效、更易读代码的方法,用单行解决方案替换传统的循环。

译自 Write Better Python With List Comprehensions,作者 Jessica Wachtel。

Python 列表推导式在一行高效易读的代码中,从现有的列表和序列生成新的列表。它们提供了一种简洁的语法来完成此任务,从而减少了代码行数。与其使用多行代码通过循环执行操作,列表推导式 使用一对方括号将循环和可选条件嵌入到一行中。列表推导式可以使用任何可迭代对象(集合、字符串、元组、列表)来生成新的列表。列表推导式可以用于单个列表或展平嵌套列表。

列表推导式被认为是“Pythonic”风格的代码,因为它与 Python 编写简洁高效代码的理念紧密契合。它们不仅在执行操作方面有效,而且列表推导式也更容易一目了然地理解。

这是一个构建偶数列表的循环示例:

even_numbers = []
for n in range(1, 11): 
    if n % 2 == 0:  
        even_numbers.append(n) 

print(even_numbers)

输出: [2, 4, 6, 8, 10]

与作为列表推导式执行的相同操作相比:

even_numbers = [n for n in range(1, 11) if n % 2 == 0] 

print(even_numbers)

输出: [2, 4, 6, 8, 10]

在许多以前由循环完成的重复性任务和数据处理方面,列表推导式是一个有用的工具。列表推导式在现实世界中的一些示例包括:

快速网页内容渲染:列表推导式自动创建重复的 HTML 标签或字符串。这种动态内容生成简化了创建基于文本内容(例如链接、表格行)的开发过程。

数据分析:列表推导式降低了代码复杂性,从而消除了任何潜在的错误。它们简化了数据转换,并允许快速且易读的数据修改。诸如将值转换为其他值的处理任务,是列表推导式的绝佳用例。

更快的原型设计和测试周期:开发人员可以使用列表推导式创建模拟数据(例如用户配置文件和交易)来模拟现实场景。

更轻松的系统故障排除和监控:列表推导式为快速过滤和分析日志文件提供了一个优雅的框架。开发人员可以编写一行简单的代码,快速扫描日志并提取相关条目,例如系统趋势和应用程序日志。

能够对大型数据集进行高效计算:在执行诸如规范化值或应用统计计算之类的数学和数据密集型任务时,列表推导式减少了对冗长、重复循环的需求。

列表推导式并非万能的解决方案。虽然它们对于特定任务非常强大,但在所有情况下都不能使用。当处理复杂的逻辑、就地修改、错误处理、内存密集型操作和错误处理时,传统的循环提供了更大的控制、可读性和灵活性。列表推导式最适合简单的、单步转换和过滤,其中新的列表是预期的输出。

操作方法:

以下是使用单个列表的基本语法:

variable = [expression for item in iterable if condition]

if 条件不是必需的。只有当你的代码使用条件时才使用 if 条件。

这是一个没有 if 条件的简单列表推导式示例:

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

print(squares)

输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

这是一个添加了 if 条件的相同示例。

even_squares = [n ** 2 for n in range(1, 21) if n % 2 == 0]

print(even_squares)

输出: [4, 16, 36, 64, 100, 144, 196, 256, 324, 400]

简化嵌套循环的列表推导式的基本语法如下所示:

variable = [expression for item1 in iterable1 for item2 in iterable2]

这是一个没有条件语句的示例:

colors = ["red", "green", "blue"]
shapes = ["circle", "square"]

combinations = [(color, shape) for color in colors for shape in shapes]

print(combinations)

输出: [('red', 'circle'), ('red', 'square'), ('green', 'circle'), ('green', 'square'), ('blue', 'circle'), ('blue', 'square')]

最后的示例包含一个条件语句:

colors = ["red", "green", "blue"]
shapes = ["circle", "square"]

red_combinations = [(color, shape) for color in colors for shape in shapes if color == "red"]

print(red_combinations)

输出: [('red', 'circle'), ('red', 'square')]

列表推导式是Python编程中宝贵的工具,它提高了效率和可读性,同时简化了许多常见任务。通过了解它们的优势和局限性,开发人员可以利用此功能编写更简洁、更“Pythonic”的代码。

相关推荐

4万多吨豪华游轮遇险 竟是因为这个原因……

(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...

“菜鸟黑客”必用兵器之“渗透测试篇二”

"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...

科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白

作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...

麦子陪你做作业(二):KEGG通路数据库的正确打开姿势

作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...

知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势

智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...

每日新闻播报(September 14)_每日新闻播报英文

AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...

香港新巴城巴开放实时到站数据 供科技界研发使用

中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...

5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper

本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...

Qt动画效果展示_qt显示图片

今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...

如何从0到1设计实现一门自己的脚本语言

作者:dong...

三年级语文上册 仿写句子 需要的直接下载打印吧

描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...

C++|那些一看就很简洁、优雅、经典的小代码段

目录0等概率随机洗牌:1大小写转换2字符串复制...

二年级上册语文必考句子仿写,家长打印,孩子照着练

二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...

一年级语文上 句子专项练习(可打印)

...

亲自上阵!C++ 大佬深度“剧透”:C++26 将如何在代码生成上对抗 Rust?

...

取消回复欢迎 发表评论: