python中itertools模組介紹---02

來源:互聯網
上載者:User

標籤:

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.