python高级编程之生成器表达式和itertools模块

# -*- coding: utf-8 -*-

# python:2.x

__author__ = ‘Administrator‘

#生成器表达式和itertools模块

#yield 中可以使用圆括号代替中括号

iter0=(x**2 for x  in range(10)if x%2==0)

for iter1 in iter0:

print iter1

#结果

"""

0

4

16

36

64

"""

#这样的表达式被称为生成器或者genexp,它们使用类似列表推导方式减少了序列代码总量,当在yield表达式上创建简单的循环时,就使用它

import itertools

#特点是:高效,最有趣:islice,tee,groupby这3个方法

print ‘-‘*30

#islice窗口迭代器

"""

itertools.islice(iterable, stop)

itertools.islice(iterable, start, stop[, step])

"""

# def islice1():

#     value=raw_input().strip()

#     while value!=‘‘:

#         for el in itertools.islice(value.split(),4,None):#表示从第5行开始每行元素,只要这行超过4个元素

#             yield el

#         value=raw_input().strip()

# iter11=islice1()

# print iter11.next()

#使用场景:当需要抽取位于流中特定位置数据时,就可以使用islice,比如可能是使用记录特定格式文件,或者表现元数据封闭数据流时

#tee往返式迭代器

"""

tee提供了在一个序列之上运行多个迭代器模式,如果提供第一次运行信息,就能够帮助我们再次基于这些数据运行

"""

def tee1(iters,headsize=1):

a,b=itertools.tee(iters)

return list(itertools.islice(a,headsize)),b

print tee1(‘abcdef‘)#([‘a‘], <itertools.tee object at 0x0000000002347C08>)

print tee1(‘abcd‘,4)#([‘a‘, ‘b‘, ‘c‘, ‘d‘], <itertools.tee object at 0x0000000002427B88>)

#print tee1(‘abc‘,-2)ValueError: Indices for islice() must be None or an integer: 0 <= x <= maxint.

#当tee生成两个迭代器,那么第一个迭代器由islice获取这个迭代第一个headsize元素,并做为普通列表返回,第二个迭代器返回的元素是一个新的迭代器,可以工作在整个序列之上

#groupby:uniq迭代器

#它可以对来自一个迭代器重复元素进行分组,只要它们是相邻的,还可以提供另一个函数来执行元素比较,否则将采用标识符比较

def groupbu1(data):

return((len(list(data)),name)\

for name,g in itertools.groupby(data))

def groupbu2(data):

return(car*size for size,car in data)

print list(groupbu1(‘get uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu‘))

#[(39, ‘g‘), (39, ‘e‘), (39, ‘t‘), (39, ‘ ‘), (39, ‘u‘)]

c=groupbu1(‘get uuuuuuuuuuuuuuuuuuuuuuuuuuup‘)

print ‘ ‘.join(groupbu2(c))#gggggggggggggggggggggggggggggggg eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee tttttttttttttttttttttttttttttttt                uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu pppppppppppppppppppppppppppppppp

#其他说明:压缩算法

"""

REL进行对数据压缩,字符串中每组相邻的重复字符串将替换成该字符串本身和重复次数,如果字符串没有重复,则使用1

如果对压缩算法有算法,可以考虑LZ77算法,它是RLE增强版本,将想找相邻相同模式,而不是相同字符,

网址为:http://en.wikipedia.org/wiki/LZ77

"""

"""

当需要在数据上完成一个摘要的时候,可以使用groupty,这个时候,内建的sorted函数特别有用,可以传入的数据中相信的元素相邻

"""

#itertools其他说明及文档

#文档 :https://docs.python.org/2/library/itertools.html?highlight=itertools#itertools

python高级编程之生成器表达式和itertools模块

时间: 2024-08-08 13:56:54

python高级编程之生成器表达式和itertools模块的相关文章

Python高级编程之生成器(Generator)与coroutine(二):coroutine介绍

原创作品,转载请注明出处:点我 上一篇文章Python高级编程之生成器(Generator)与coroutine(一):Generator中,我们介绍了什么是Generator,以及写了几个使用Generator Function的示例,这一小节,我们会介绍Python的coroutine,以及会有一个小例子,再接下来的文章中会以代码的形式一步步介绍coroutine的高级用法. coroutine(协程) 什么是coroutine?coroutine跟Generator有什么区别?下面先看一段

python高级编程-Part1 生成器和迭代器

迭代器和生成器是python学者们经常谈到的话题,我也不能免俗,因为实在值得总结一下.     迭代器 迭代器是对可迭代对象进行操作,通过next方法一次吐出一个元素的工具.我们用到的for..in..内部使用的就是迭代器功能. 如果要自定义一个迭代器类的话,需要满足下面的条件: 需要在类中定义__iter__方法返回self自身,表示这是一个迭代器: 需要定义next方法来返回迭代的值,其中应该包含StopIteration异常的判断 下面试着写一个自定义迭代器类的例子(模仿自Python高级

Python高级编程之生成器(Generator)与coroutine(一):Generator

这是一系列的文章,会从基础开始一步步的介绍Python中的Generator以及coroutine(协程)(主要是介绍coroutine),并且详细的讲述了Python中coroutine的各种高级用法,最后会用coroutine实现一个简单的多任务的操作系统. 其实也是看完这篇文章的学习笔记吧!O(∩_∩)O 生成器(Generator) 什么是生成器?在Python中,生成器(Generator)是一个带有yield关键字的函数 1 def gene(): 2 a = 1 3 print "

Python高级编程之生成器(Generator)与coroutine(四):一个简单的多任务系统

啊,终于要把这一个系列写完整了,好高兴啊 在前面的三篇文章中介绍了Python的Python的Generator和coroutine(协程)相关的编程技术,接下来这篇文章会用Python的coroutine技术实现一个简单的多任务的操作系统 代码如下,可看注释 1 #-*-coding:utf-8 -*- 2 ''' 3 用Python和coroutine实现一个简单的多任务系统 4 ''' 5 # ##Step 1:Define Tasks###########################

Python高级编程之生成器(Generator)与coroutine(二):coroutine与pipeline(管道)和Dataflow(数据流_

原创作品,转载请注明出处:点我 在前两篇文章中,我们介绍了什么是Generator和coroutine,在这一篇文章中,我们会介绍coroutine在模拟pipeline(管道 )和控制Dataflow(数据流)方面的运用. coroutine可以用来模拟pipeline行为.通过把多个coroutine串联在一起来实现pipe,在这个管道中,数据是通过send()函数在各个coroutine之间传递的: 但是这些在pipe中传递的数据哪里来的呢?这就需要一个数据源,或者说producer.这个

python高级编程之迭代器与生成器

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #迭代器与生成器 #--------------------------------------- #迭代器基于2个方法 """ next:返回容器下一个项目 __iter__:返回迭代器本身 """ #通过内建函数和序列来创建 i=iter('abc') print i.next()#a print i.next(

Python高级编程pdf

下载地址:网盘下载 内容简介  · · · · · · <Python高级编程>通过大量的实例,介绍了Python语言的最佳实践和敏捷开发方法,并涉及整个软件生命周期的高级主题,诸如持续集成.版本控制系统.包的发行和分发.开发模式.文档编写等.<Python高级编程>首先介绍如何设置最优的开发环境,然后以Python敏捷开发方法为线索,阐述如何将已被验证的面向对象原则应用到设计中.这些内容为开发人员和项目管理人员提供了整个软件工程中的许多高级概念以及专家级的建议,其中有些内容的意义

python高级编程之装饰器04

from __future__ import with_statement # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #with和contextlib #对于要确保即使发生一个错误时也能运行一些清理代码而言,try...finally语句很有用,对以下场景,如: """ 关闭一个文件, 释放一个锁 创建一个临时代码补丁 在特殊环境中运行受保护代码 ----------- with语句覆盖

python高级编程:有用的设计模式3

# -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#访问者:有助于将算法从数据结构中分离出来"""它与观察者都有相似的目标,都能在不修改代码的情况下扩展指定的类功能,但是访问者更进一步,它将定义一个负责保存数据类,并将算法推进被称为访问者的其他类中.这种行为和mvc范围(请看:http://en.wikipedia.org/wiki/model-view-controller)相当类似,