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

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

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

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

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

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

秘籍一:简单生成列表

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

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

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

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

秘籍二:条件过滤

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

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

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

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

秘籍三:嵌套循环的简化

处理多层数据结构时,嵌套列表推导式能让你轻松应对。比如,如果我们有两个列表,想得到它们的笛卡尔积(每个元素对),可以这样做:clm28资讯网——每日最新资讯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')]展示了每对元素的组合。clm28资讯网——每日最新资讯28at.com

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

秘籍四:利用if-else结构

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

假设我们有两个列表,分别表示姓名和年龄,我们想组合成一个包含名字和年龄的元组列表。clm28资讯网——每日最新资讯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)]。clm28资讯网——每日最新资讯28at.com

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

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

字典推导式示例:clm28资讯网——每日最新资讯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'}。clm28资讯网——每日最新资讯28at.com

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

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

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

秘籍九:避免常见陷阱

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

秘籍十:高级技巧与模式

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    疫情带来了网课,网课盘活了安卓平板,安卓平板市场虽然中途停滞了几年,但好的一点就是停滞的这几年行业又有了新的发展方向,例如超窄边框、高刷新率、多摄镜头组合等,这就让安卓
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页&ldquo;充值中心&rdquo;入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • 华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    8月1日消息,郭明錤今天在社交平台发文称,华为正在和江淮汽车合作,开发售价在100万元的问界MPV,预计在2024年第2季度量产,销量目标为上市首年交付5万辆。
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
Top