当前位置:首页 > 科技  > 软件

十个 Python 高效列表推导式秘籍

来源: 责编: 时间:2024-05-20 08:50:37 132观看
导读今天我们要探讨的是列表推导式——编程中的一个小巧却强大的工具。想象一下,你需要快速地创建一个新列表,这个列表包含了原列表中每个元素的平方,你会怎么做?传统的循环方式虽然可行,但Python的列表推导式能让你的代码更加

今天我们要探讨的是列表推导式——编程中的一个小巧却强大的工具。想象一下,你需要快速地创建一个新列表,这个列表包含了原列表中每个元素的平方,你会怎么做?传统的循环方式虽然可行,但Python的列表推导式能让你的代码更加简洁、易读。TvN28资讯网——每日最新资讯28at.com

列表推导式是Python中用于生成列表的一种高级且高效的方式,它允许你用一行代码完成原本可能需要多行循环才能完成的任务。这不仅让代码更紧凑,还能提高程序的执行效率。TvN28资讯网——每日最新资讯28at.com

TvN28资讯网——每日最新资讯28at.com

秘籍一:简单生成列表

列表推导式的最基本形式是这样的:TvN28资讯网——每日最新资讯28at.com

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

这段代码的意思是:“对于数字1到5(不包括6),计算每个数字的平方,并将结果存储到列表squares中。”运行后,你会得到[1, 4, 9, 16, 25]。简单吧?这就是列表推导式的魔力!TvN28资讯网——每日最新资讯28at.com

工作原理:列表推导式由一对方括号包围,内部包含一个表达式和一个或多个for循环,以及可选的if条件。这里的表达式x**2就是对每个x进行的操作。TvN28资讯网——每日最新资讯28at.com

秘籍二:条件过滤

在列表推导式中添加条件判断,就像是给你的代码加上了智慧的滤镜,只保留你想要的部分。TvN28资讯网——每日最新资讯28at.com

示例:筛选偶数TvN28资讯网——每日最新资讯28at.com

想象你要从1到10的列表中选出所有的偶数。传统的做法可能是遍历列表,然后检查每个数是否能被2整除。列表推导式让我们这样做:TvN28资讯网——每日最新资讯28at.com

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

这段代码的意思很直接:“对于1到10的每一个数x,如果x除以2余数为0(即x是偶数),就把它加到列表里。”执行后,even_numbers将是[2, 4, 6, 8, 10]。TvN28资讯网——每日最新资讯28at.com

小技巧:条件判断可以有多个,只要用逻辑运算符(如and, or)连接即可。TvN28资讯网——每日最新资讯28at.com

秘籍三:嵌套循环的简化

处理多层数据结构时,嵌套列表推导式能让你轻松应对。比如,如果我们有两个列表,想得到它们的笛卡尔积(每个元素对),可以这样做:TvN28资讯网——每日最新资讯28at.com

list1 = [1, 2]list2 = ['a', 'b']product = [(x, y) for x in list1 for y in list2]

这里,我们创建了一个由两个列表元素组成的元组列表。结果[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]展示了每对元素的组合。TvN28资讯网——每日最新资讯28at.com

实践理解:嵌套推导式看起来可能有点复杂,但其实遵循着“外层循环变量 -> 内层循环变量 -> 结果表达式”的逻辑。TvN28资讯网——每日最新资讯28at.com

秘籍四:利用if-else结构

列表推导式不仅能做简单的条件过滤,还能结合if-else来处理更复杂的逻辑。这使得在生成列表时可以根据不同的条件返回不同的值。TvN28资讯网——每日最新资讯28at.com

示例:正负数转换TvN28资讯网——每日最新资讯28at.com

假设我们需要一个列表,其中正数变为它的平方,负数变为它的绝对值。列表推导式可以这样写:TvN28资讯网——每日最新资讯28at.com

numbers = [-1, 2, -3, 4]transformed = [x**2 if x > 0 else abs(x) for x in numbers]

这段代码说:“对于每个数x,如果x大于0,则返回x的平方;否则,返回x的绝对值。”最终,transformed会是[1, 4, 3, 4]。TvN28资讯网——每日最新资讯28at.com

解析:这里,if-else结构被嵌入到表达式中,使得单行代码能够完成复杂的条件分支操作。TvN28资讯网——每日最新资讯28at.com

秘籍五:与生成器表达式的对比

生成器表达式(Generator Expressions)与列表推导式相似,但它们不是立即生成整个列表,而是生成一个迭代器,按需产生值,非常适合大数据处理。它们的语法几乎相同,只是用圆括号代替方括号。TvN28资讯网——每日最新资讯28at.com

示例对比:TvN28资讯网——每日最新资讯28at.com

  • 列表推导式:[x for x in range(1000)]
  • 生成器表达式:(x for x in range(1000))

生成器在内存使用上更为高效,适合大循环或不确定大小的数据处理。TvN28资讯网——每日最新资讯28at.com

秘籍六:列表推导式与函数结合

Python的高阶函数,如map(),可以与列表推导式巧妙结合,但通常直接使用列表推导式更为直观和高效。TvN28资讯网——每日最新资讯28at.com

示例:使用列表推导式代替map()TvN28资讯网——每日最新资讯28at.com

假设我们想对列表中的每个元素应用平方操作:TvN28资讯网——每日最新资讯28at.com

numbers = [1, 2, 3]# 传统方法:使用mapsquared的传统 = list(map(lambda x: x**2, numbers))# 列表推导式方法squared_现代 = [x**2 for x in numbers]

虽然两者都能达到目的,但列表推导式在阅读性和编写速度上往往更胜一筹。TvN28资讯网——每日最新资讯28at.com

秘籍七:列表推导式中的元组解包

元组解包在列表推导式中可以用来处理多个列表或序列的对应元素。这在处理并行数据集时非常有用。TvN28资讯网——每日最新资讯28at.com

实例:同时操作两个列表TvN28资讯网——每日最新资讯28at.com

假设我们有两个列表,分别表示姓名和年龄,我们想组合成一个包含名字和年龄的元组列表。TvN28资讯网——每日最新资讯28at.com

names = ['Alice', 'Bob', 'Charlie']ages = [24, 30, 22]info = [(name, age) for name, age in zip(names, ages)]

这里,zip(names, ages)将两个列表的元素配对,然后列表推导式将每对元素包装成一个元组。结果是[('Alice', 24), ('Bob', 30), ('Charlie', 22)]。TvN28资讯网——每日最新资讯28at.com

秘籍八:列表推导式与字典、集合的结合

列表推导式不仅限于生成列表,它们还可以与字典推导式、集合推导式巧妙结合,实现数据结构的高效转换。TvN28资讯网——每日最新资讯28at.com

字典推导式示例:TvN28资讯网——每日最新资讯28at.com

keys = ['name', 'age', 'city']values = ['Alice', 24, 'New York']data_dict = {k: v for k, v in zip(keys, values)}

这将创建一个字典{'name': 'Alice', 'age': 24, 'city': 'New York'}。TvN28资讯网——每日最新资讯28at.com

集合推导式示例: 如果你想从列表中去除重复元素,可以这样做:TvN28资讯网——每日最新资讯28at.com

numbers = [1, 2, 2, 3, 4, 4]unique_numbers = {num for num in numbers}

结果得到集合{1, 2, 3, 4},自动去重。TvN28资讯网——每日最新资讯28at.com

秘籍九:避免常见陷阱

  • 过度使用:虽然列表推导式强大,但在逻辑过于复杂时,应考虑使用传统的循环,以保持代码的可读性。
  • 内存消耗:对大列表使用列表推导式时,注意内存使用,考虑使用生成器表达式。
  • 清晰优先:即使列表推导式可以简化代码,也应确保其仍然易于理解。

秘籍十:高级技巧与模式

  • 嵌套复杂推导:当需要时,合理使用嵌套,但要小心不要使代码难以理解。
  • 组合使用:列表推导式可以与函数式编程技巧结合,如filter(),进行高级数据处理。

综合案例: 假设我们有一个列表,需要筛选出大于10且平方后小于100的数,并返回它们平方后的结果。TvN28资讯网——每日最新资讯28at.com

numbers = [9, 10, 11, 20]filtered_squares = [x**2 for x in numbers if 10 < x < 100]

这将得到[121],展示了条件判断与数学运算的完美结合。TvN28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-89226-0.html十个 Python 高效列表推导式秘籍

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 通过 Type 和 Object 之间的关联,进一步分析类型对象

下一篇: 聊聊分布式本地缓存刷新方案

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • JavaScript 混淆及反混淆代码工具

    JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 为什么你不应该使用Div作为可点击元素

    为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • Temu起诉SHEIN,跨境电商战事升级

    Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • OPPO、vivo、小米等国内厂商Q2在印度智能手机市场份额依旧高达55%

    OPPO、vivo、小米等国内厂商Q2在印度智能手机市场份额依旧高达55%

    7月20日消息,据外媒报道,研究机构的报告显示,在全球智能手机出货量同比仍在下滑的大背景下,印度这一有潜力的市场也未能幸免,出货量同比也有下滑,多家厂
  • 苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    集微网消息,据彭博社报道,在8月3日印度突然禁止在没有许可证的情况下向印度进口电脑/平板及显示器等产品后,苹果、三星电子和惠普等大公司暂停向印度
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top
Baidu
map