码迷,mamicode.com
首页 > 编程语言 > 详细

python中itertools模块介绍---02

时间:2015-03-29 22:18:11      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:

chain(*iterables):

源代码:

def chain(*iterables):
    for it in iterables:
        for element in it:
            yield element

chain函数接收多个参数(iterables),并且对iterables进行遍历,返回每个iterable中的元素。最终结果就像返回的所有元素均来自同一个单一的序列,例如:

>>>a=chain(‘ab‘,‘cd‘)
>>>a.next()
a
>>>a.next()
b
>>>a.next()
c
>>>a.next()
d

izip(*iterables):

源代码:

def izip(*iterables):
    iterators=map(iter,iterables)
    while iterators:
        yield tuple(map(next,iterators))

 首先调用map函数,将iterables变为迭代器列表。当列表不为空时,再次调用map函数,对iterators中的每一个迭代器进行next,形成列表,然后变为元组返回。例如:

>>>a=izip("abc","cd")
>>>a.next()
(‘a‘,‘c‘)
>>>a.next()
(b,d)

compress(data,selectors):

源代码:

def compress(data,selectors):
    return (d for d,s in izip(data,selector) if s)

compress函数的实现借助了izip函数。采用生成器表达式,当izip返回的元组的第1个(从0开始)元素为真时,取该元组的第0个元素。例如:

>>>a=compress(‘abc‘,[0,1,2])
>>>a.next()
b
>>>a.next()
c

dropwhile(predicate,iterable):

源代码:

def dropwhile(predicate,iterable):
    iterable=iter(iterable)
    for x in iterable:
        if not predicate(x):
            yield x
            break
    for x in iterable:
        yield x

对iterable中的每一个元素都调用predicate函数,直到predicate(x)函数返回False时,才会将该项及后续项返回。例如:

>>>a=dropwhile(lambda x:x>3,[5,7,6,1,1,4])
>>>a.next()
1
>>>a.next()
1
>>>a.next()
4

groupby(iterable[,key]):

源代码:

class groupby(object):
    def __init__(self,iterable,key=None):
        if key is None:
            key=lambda x:x
        self.keyfunc=key
        self.it=iter(iterable)
        self.tgtkey=self.currkey=self.currvalue=object()
    def __iter__(self):
        return self
    def next(self):
        while self.currkey==self.tgtkey:
            self.currvalue=next(self.it)
            self.currkey=self.keyfunc(self.currvalue)
        self.tgtkey=self.currkey
        return (self.currkey,self._grouper(self.tgtkey))
    def _grouper(self,tgtkey):
        while self.currvalue==tgtkey:
            yield self.currvalue
            self.currvalue=next(self.it)
            self.currkey=self.keyfunc(self.currvalue)

groupby函数的作用是依据key对iterable进行分组。当没有指定key时,key赋值为一个匿名函数,该匿名函数返回对象本身。此时,将相邻的、且相同的元素分为一组。如"aabbcdb"将分为"aaa","bb","c","d","b"这几组。当指定key时,则按key的规则进行分组。例如key=len,那么将长度相同的元素分为一组。如a=["12","23","123","1234"]分为["12","23"],["123"],["1234"]这几组。最后返回的是一个元组(self.currkey,self._grouper(self.tgtkey))。元组的第0个元素是分组的键值,第1个元素是一个迭代器(该组中具体包含的内容)。例如:

>>>a=groupby("aaabbcde")
>>>a.next()
(‘a‘,迭代器)
>>>a.next()
(‘b‘,迭代器)
>>>a=groupby(["abc","bcd","ab","bc"],len)
>>>a.next()
(3,迭代器)
>>>a.next()
(2,迭代器)

ifilter(predicate,iterable):

源代码:

def ifilter(predicate,iterable):
    if predicate is None:
        predicate=bool
    for x in iterable:
        if predicate(x):
            yield x

当predicate(x)为真时,返回x。例如:

>>>a=ifilter(lambda x:x>2,[1,2,3,4])
>>>a.next()
3
>>>a.next()
4

iflterfalse(predicate,iterable):

与iflter函数相反,当predicate(x)为假时,x被返回。源代码和具体的实例略。


python中itertools模块介绍---02

标签:

原文地址:http://my.oschina.net/935572630/blog/393345

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!