python3-知识扩展扫盲易忘-generator的用法
前部分转自:
https://www.cnblogs.com/Tsukasa/p/6613934.html
通过列表list生成器,我们可以直接创建一个列表
|
1
2
3
|
>>> x = list(range(1,11))>>> x[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
但是,受到内存的限制,列表的容量是有限的,而且创建一个包含100万1个亿的列表时候,不仅会占用很大的储存空间,如果有事我们只要访问前面几个元素,那后面大多数元素都白白浪费了。而且运作效率低下。
如果列表元素可以按某种算法推算出来,那我们是否可以在循环的过程中不断推算出后面的元素呢?这样就不必要创建一个完整的list列表了,从而提升程序的效率。在python中,这种一边循环一边计算的机制,称为生成器generator
要创建一个generator,有很多方法:
第一种方法很简单,就是只要把一个列表生成试的 [ ] 改成 ( ) 就可以创建一个generator:
|
1
2
3
4
5
6
|
>>> l = [x * x for x in range(10)]>>> l[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]>>> g = (x * x for x in range(10))>>> g<generator object <genexpr> at 0x00000000035BC410> |
L 是一个list, 而 G 是一个generator:它们在创建时候最基本的不同就list是 [ ] ,而generator是 ( ) 。
我们可以直接打印出list的全部元素,但是怎么打印出generator的全部元素呢?
|
1
2
|
>>> g<generator object <genexpr> at 0x00000000035BC410> |
如果要一个个打印出来,可以通过next()函数来获得generator的下一个返回值。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
>>> next(g)0>>> next(g)1>>> next(g)4>>> next(g)9>>> next(g)16>>> next(g)25>>> next(g)36>>> next(g)49>>> next(g)64>>> next(g)81>>> next(g)Traceback (most recent call last): File "<pyshell#18>", line 1, in <module> next(g)StopIteration |
generator保存的是算法,每次调用 next(g)的时候才会计算 g 的下一个元素值,直到计算到最后一个元素,没有下一个元素时,会返回stopIteration的错误。
当然,上面这种不停调用next (g)这种方法实在是太繁琐了,正确的方法是使用for循环,因为generator也是一个可迭代对象:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>> g = (x * x for x in range(10))>>> for n in g:... print(n)... 0149162536496481 |
jieba的cut_for_search输出可以按:
seg_list = jieba.cut_for_search("你好明天")
print(",".join(seg_list)) seglist 为generator
python3-知识扩展扫盲易忘-generator的用法的更多相关文章
- python3-知识扩展扫盲易忘-zip的用法
>>>a = [1,2,3] >>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> zipped = zi ...
- python3-知识扩展扫盲易忘-map,collections.Counter()的用法
map() 会根据提供的函数对指定序列做映射. 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表. >> ...
- 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)
本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...
- 【NLP】条件随机场知识扩展延伸(五)
条件随机场知识扩展延伸 作者:白宁超 2016年8月3日19:47:55 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务中都有应 ...
- 【Hook技术】实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展
[Hook技术]实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展 公司有个监控程序涉及到进程的保护问题,需要避免用户通过任务管理器结束掉监控进程,这里使用 ...
- 互联网 Java 工程师进阶知识完全扫盲
互联网 Java 工程师进阶知识完全扫盲:https://github.com/doocs/advanced-java
- 逆元知识普及(扫盲篇) —— from Judge
watch out 本文是博主的 csdn 上搬过来的,格式有点崩,看不下去的可以去 博主的 csdn上看(上面 格式会好很多,并且有些公式也用 $\LaTeX$ update 上去了) 最近有点颓 ...
- IT知识大扫盲
做了这么多软件开发,下列一些知识不一定都懂. 首先,说一些电子商务扫盲的名词: 常见的电子商务类型有:C2C.B2B.B2C.C2B.O2O等等,下面来简要说明下这几种类型. C2C(Customer ...
- php安装时开启很多扩展,如果忘了开启某些扩展,以后还能加上吗?答案是可以的
php配置时,这里面开启了很多扩展.如果这时候忘了开启,以后还能加上吗?答案是可以的.以后只需要进入源码的ext目录,例如忘了pdo_mysql,进入ext/pdo_mysql,使用phpize工具, ...
随机推荐
- 【Python52--爬虫1】
一.Python如何访问互联网 采用urllib包来访问 二.理论 1.请问URL是“统一资源标识符”还是“统一资源定位符” URI是统一资源标识符,URL是统一资源定位符.即:URI是用字符串表示某 ...
- Junit Framework -TestRule,自动化测试中如何再次运行失败的测试用例
有时由于服务器,浏览器等问题,会导致自动化测试用例运行失败,此处通过案例讲解如何使用Junit框架中的TestRule来实现重复运行失败的测试用例. 首先定义一个类并让它实现TestRule,代码如下 ...
- POJ 3264 Balanced Lineup (线段树查找最大最小值)
http://poj.org/problem?id=3264 题意:给你一个长度为n的序列a[N] (1 ≤ N ≤ 50000),询问Q(1 ≤ Q ≤ 200000) 次,每次输出[L, R]区间 ...
- 配置vim
VundleVuldle是一个全自动的插件管理器,让我们通过维护插件列表的方式管理插件.它为安装.更新.删除插件提供了方便的命令.在安装Git的情况下(本文不赘述Git的安装),输入命令: git c ...
- LightOJ 1027 A Dangerous Maze(期望)题解
题意:n扇门,每扇门后都有一个值x,如果x<0会让你等待-x再重新回到这里选择门,x>0你经过x时间就会被传送走,问你被传送走的期望 思路:假设被传送走的期望为E,那么对于x<0来说 ...
- POJ 2400 Supervisor, Supervisee(KM二分图最大权值匹配)题解
题意:n个老板n个员工,先给你n*n的数据,i行j列代表第i个老板第j喜欢的员工是谁,再给你n*n的数据,i行j列代表第i个员工第j喜欢的老板是谁,如果匹配到第k喜欢的人就会产生一个分数k-1.现在让 ...
- 每天一个小程序—0013题(爬图片+正则表达式 or BeautifulSoup)
第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 关于python3的urllib模块,可以看这篇博客:传送门 首先是用urlopen打开网站并且获取网页 ...
- 使用axios实现上传视频进度条
这是最终的效果图 先介绍一下axios的使用:中文的axios官方介绍 首先定义一个uploadTest方法,写在vue文件的methods里 该方法有三个参数,分别是参数,和两个回调函数,参数就是我 ...
- Java处理微信公众号文章图片不显示微信
http://blog.csdn.net/just4you/article/details/52933620
- 网页title左边显示网页的logo图标
打开某一个网页会在浏览器的标签栏处显示该网页的标题和图标,当网页被添加到收藏夹或者书签中时也会出现网页的图标,怎么在网页title左边显示网页的logo图标呢? 方法1: 找一个或者作一个ico文件, ...