最后
🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
2 列表解析式
列表解析式的基本语法是如下
[ 返回值for元素in可迭代对象if条件]
使用中括号将表达式(推导式)括起来
内部是for循环,if条件可选,可以是多个但是不支持elif语句
返回一个新的列表
有这样的赋值语句 newlist = [ print(i) for i in range(10) ],请问newlist打印出来是什么?
为什么是None?因为表达式只会将函数的返回值作为结果,进行添加,所以当返回值是一个函数操作的对象时,一定要注意函数的返回值!
2.1 列表解析式进阶
有的时候我们的代码需要进行两个或多个循环,列表解析式进阶版本可以满足这种需求哦。它的语法是:
条件表达式可以是多个,但是不能是elif,多个if是并且的关系
多个循环条件等同于循环嵌套,时间复杂度是O(n*内层循环个数)
例子:
3 其他解析式
除了列表解析式以外,Python中还存在集合解析式、字典解析式、‘元组解析式’。
可不是什么元组解析式,这行小字你看不到,可不怪我哦。
3.1 集合表达式
语法:{ 返回值 for 元素 in 可迭代对象 if 条件 }
列表解析式的中括号换成大括号{}即可
同样是立即返回一个集合
注意集合的特性,如果生成了不可hash的元素比如list,那么是不能生成集合的哦,如果元素重复,集合会去重的哦
3.2 字典解析式
语法:{ 返回值(key:value) for 元素 in 可迭代对象 if 条件 }
列表解析式的中括号换成大括号{}即可
请使用key:value格式
立即返回一个字典
注意字典的key相同时,后面的赋值会把之前的值覆盖哦,所以结果是{‘a’: 9, ‘b’: 9, ‘c’: 9, ‘d’: 9, ‘e’: 9, ‘f’: 9}
4 生成器表达式
如果你是从上倒下看的,那么你可能会奇怪,说好的元组表达式呢?如果你是直接跳转过来的,那么请忽略前面这句话。那什么是生成器表达式呢?
生成器表达式是按需计算(或者惰性求值、延迟计算)的,只有需要的时候才计算值,而列表解析式是直接返回一个新的列表,生成器是一个可迭代对象,迭代器。在使用type命令判断对象类型时,generator 就表示一个生成器对象
语法:( 返回值 for 元素 in 可迭代对象 if 条件表达式 )
列表解析式的中括号换成大括号()即可
延迟计算(惰性计算)
只能迭代一次,不能回头
4.1 特点
没错,用括号括起来的并不是元组表达式,而变成了生成器表达式,它本身由于惰性计算的特性和其他解析式有很多不同的特性
计算方式
生成器表达式延迟计算(惰性计算),只有你去向它要,它才会给你计算,而列表解析式在你执行后,会直接给你生成一个新的列表。
内存占用
生成器没有数据,内存占用极少,它是使用时一个一个返回数据,如果将这些返回的数据合起来占用的空间也和列表解析式差不多,但是它不是立即需要这么多空间
计算速度
单看计算时间来看,生成器表达式耗时非常短,列表解析式时长,因为生成器本身并没有任何返回值,只是返回了一个生成器对象,列表解析式构造并返回了一个新的列表,所以看起来更耗时了
遍历
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!