ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python强大之处列表推导式和生成器

2021-07-08 21:54:45  阅读:149  来源: 互联网

标签:generator 推导 python list1 生成器 列表 print


# python强大之处列表推导式和生成器 学习Python一定会见到好多大神写的看不懂的东西,其实这些东西有的有价值,有的没有价值,就是让你看不懂。 ## 列表推导式 好多人都听过列表推导式,这个究竟是个什么东西呢。我们来看看,听我的讲解会简单很多,欢迎大家关注呦。 列表推导式是什么,其实就是个列表,我们看看演变过程 ```python list1 = [] for x in range(10): list1.append(x) ``` 列表推导式可以这样 ```python list1 = [x for x in range(10)] ``` 那么有人问了,这两个有区别,答案是没有的,就是第二个看起来高大上,让你看不懂,能美观一些,也就仅此了。我们今天只来只是简单带一下列表推导式,没有具体场景的知识点,我不会过多介绍。下面的知识点就不一样了,它和列表推导式很像,但是场景和功能跟强大。 ## 生成器 什么是生成器,繁琐的概念也不讲,它就是一个可以迭代的迭代对象。 它长什么样子呢,我们来看一下、 ```python generator = (i for i in range(0,10)) ``` 其实生成器和列表推导式很像,就是最外层是**[]**和**()**的符号不同,这就决定了他们是不同的对象(后面我们会讲什么是对象) 那么他们只有这么点区别?当然不是,我们来看一下。 ```python # 生成器 generator = (i for i in range(0,2)) print(next(generator)) print(next(generator)) for i in generator: print(i) for i in generator: print(i) #打印结果 0 1 #列表推导式 list1 = [i for i in range(0,2)] print(list1[0]) print(list1[1]) for i in list1: print(i) for i in list1: print(i) #打印结果 0 1 0 1 0 1 ``` 结果我们可以分析,我们可以将数据比作**面包**,生成器是预先做出来10个面包,来一个人买就拿走一个直到没有。而列表推导式是不管来几个人,我都是现做10个然后卖。 ## 生成器的优点 这就没了,我看来也没啥区别啊。我们来讲一下生成器的特点。还是两段代码。 ```python list1 = [i for i in range(1000000000)] for i in list1: print(1) ``` ```python generator = [i for i in range(1000000000)] for i in generator: print(1) ``` 分别运行这两段代码,看看运行结果有什么不同,同时,看看我们计算机在运行这两段代码时内存的变化。尝试之后接着看我的解答。 生成器在循环之前已经把需要循环的数据处理完了。所以循环时候内存不会有波动。这就是生成器的好处,当数据很大的时候,用生成器可以降低计算的内存消耗。计算器缺的就是内存,当内存溢出的时候往往会有意外情况发生。好了,这里只是讲解了一点皮毛,具体的底层原理,有需要可以私聊我。 码字不易,欢迎大家在评论区留言,收藏。或者加入[群聊](https://jq.qq.com/?_wv=1027&k=vH00muGu)一起进步学习。

标签:generator,推导,python,list1,生成器,列表,print
来源: https://blog.51cto.com/u_15241290/3019024

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有