python列表解析和生成表达式浅要说明

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

  本章内容含有 列表解析和 生成表达式

在看下面的之前 我先说下 python的 核心 价值观、

◇优雅

◇清晰

◇务实

这样会让你更好理解下面要说的内容。

列表解析:如果想通过操作和处理一个序列来创建一个新的列表时,可以使用列表解析和生成表达式。当我们 对一个序列 进行一种 处理的时候,最终还要 用到一个列表,这个时候就会用到列表表达式。

生成表达式有时简单的生成器可以用简洁的方式调用,就像不带中括号的链表推导式。这些表达式是为函数调用生成器而设计的。生成器表达式比完整的生成器定义更简洁,但是没有那么多变,而且通常比等价的链表推导式更容易记。官方手册9.10 位置

 

 

 

1.     列表解析

列表解析的定义(List comprehensions)

 

我们从一道 数学题来开启此次思路

⒈ 如果我们列出小于10,并且是3或5的倍数的所有自然数,

它们是3、5、6、9,计算它们的和是3+5+6+9=23。

 

⒉ 现找出小于1000并且是3或5的倍数的所有自然数计算出

它们的和。


普通解决方案1

blob.png运算结果

运行看起来没什么问题-下面介绍下列表解析,你就会发现新世界的大门哦~

补充知识点sum函数,给它一个列表 就可以自动求和。

 

 

列表解析表达式为:

[expr for iter_var in iterable]

表达式  for循环 -迭代从后的序列当中 -进行迭代,-取到的值 -进行前面的运算

举个例子


blob.png效果很明显 先从后面遍历取值,*以前面的值。生成新的列表。

 

[expr for iter_var in iterable]

序列当中for循环 -进行迭代变量 -进行判断 -满足这个条件 -在到前面进行运算

举个例子

blob.png发现没有 i取值后 必须先执行 if 判断 小于5,才会执行到前面的运算。所以小于5的会执行运算*10。

 

列表解析 --方案2

blob.png 

这就是用列表解析 生成一个效果.是不是比普通写起来更加 优雅 ~~通过一行代码解决了问题。

小提示:当我们 对一个序列 进行一种 处理的时候最终还要 用到一个列表,这个时候就会用到列表 表达式,其它环境下用不到。


看起来代码少了一点,下面我们探究下 效率高不高

blob.png我运行了以上代码,后面计算1亿里面取值时,顿挫感很强。注意第一行的程序,当执行1-10的送代时候,会返回一个列表。当1个亿的时候,在它求和之前,会把列表全部列出来,进行求模元素,满足这个条件,就会生成一共大列表。在内存当中就会生成一段时间,会影响运算速度,占用内存空间。

现在有了有列表解析了,代码简介了,可是它的效力并不高,产生这么多无用的列表。

我不打印 ,也会在内存中产生,占用大量内存空间。

所以这个时候就要伦到二号角色上场了。

 

 

 

2.生成器表达式

(expr for iter_var in iterable)

(expr for iter_var in iterable if cond_expr)

形式上来看 ,和列表解析唯一的区别就是把列表的方括号 变成了元组的圆括号

 

▲举个生成器例子

blob.png只需要改括号就可以

Po一张 邹老师的课程的图 生成器表达器的解释和特点

blob.png

 

这里面有个概念是 生成器是为 惰性运算,这个翻译会成不同意思,这里我们就叫做生成器表达式。

列表比较长的情况下,我们都会用生成器表达式,会有效的节省内存空间。


▲案例 1

blob.png生成的是 生成器 对象返回不是值

显著特点 当有人 向它 索取值的时候,它才会把这个值产生出来,所以称之为 惰性计算

返回的不是值,它就是一个生成器对象。


案例 2

blob.png

当有方法 用到值的的时候,才会用到。和列表解析的最大区别,不会上来生成大量列表

生成器表达式 概念 = 惰性计算

惰性计算 不会无故一下生产 3-5-6-9这几个值,而是会变成一个整体对象。

---generator-生成器 - expression-表达式

有人取值了 取 3 给3 -取 5 给5 -取6给6-取9给9。在取就没有了.在列表比较长的时候会用到生成器表达式,有效节省内存空间。内存上更加优越!

 

 

知道了列表解析 和生成表达式的时候,会觉得很方便,很便捷,但是不建议一直用!

下面po一张邹老师的建议

blob.png

 可能你获得是别人二次处理的知识,你也可以去官网查官方手册


本章获得知识点:

列表解析的使用,和含义

生成表达式的使用,和含义

希望我理解能对你有帮助。     

                          

                                                                                          2017年12月15日 王宇林


 

本文转自 

新网学会 51CTO博客,原文链接:http://blog.51cto.com/xwxhvip/2051217 ,如需转载请自行联系原作者

 

相关文章
|
2月前
|
自然语言处理 算法 Python
再谈递归下降解析器:构建一个简单的算术表达式解析器
本文介绍了递归下降解析器的原理与实现,重点讲解了如何使用Python构建一个简单的算术表达式解析器。通过定义文法、实现词法分析器和解析器类,最终实现了对基本算术表达式的解析与计算功能。
102 52
|
1天前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
14 2
|
17天前
|
索引 Python
Python列表
Python列表。
42 8
|
22天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
19天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
30 9
|
27天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
56 14
|
20天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
88 5
|
29天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
43 10
|
1月前
|
存储 缓存 Python
Python中的装饰器深度解析与实践
在Python的世界里,装饰器如同一位神秘的魔法师,它拥有改变函数行为的能力。本文将揭开装饰器的神秘面纱,通过直观的代码示例,引导你理解其工作原理,并掌握如何在实际项目中灵活运用这一强大的工具。从基础到进阶,我们将一起探索装饰器的魅力所在。
|
1月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
55 7