mò %U²Ic@sådkZdklZdkTdklZdkZdkZdkZd„Z d„Z d„Z d„Z d„Z d fd „ƒYZd „Zd eifd „ƒYZdeifd„ƒYZd„Zdfd„ƒYZdfd„ƒYZdfd„ƒYZdfd„ƒYZdfd„ƒYZdfd„ƒYZdfd„ƒYZd„Zd eifd!„ƒYZd"eifd#„ƒYZd$eifd%„ƒYZd&Zhd'es %c sî|igttgƒƒƒ|igttgdtƒƒƒ|itttdgƒƒ|ittdƒ|ittdd„dƒd(d)d*d+d,d-d.d/g}g}xRt|d„ƒD]>\} } x/| D]'} |i| | dƒ|i | ƒqÓWqÀW|i||ƒg}x‰t|d„ƒD]u\} } xft| d„ƒD]R\}}xC|D];} |i| | dƒ|i|| dƒ|i | ƒq]WqJWq+W|i||ƒg} t|d„ƒD]\} } | | qË~ } tg} |D]}| |dqõ~ ƒ}|it| ƒ|ƒ|it| ƒt|ƒƒd}g} tt|ƒƒD]\} } | | qa~ }|i|dddddgƒg} tt|ƒƒD]0\} } tt| d dƒƒo | | q³q³~ }|i|dddgƒg} tt|ƒƒD]%\} } | tt| ƒƒ| fq~ }|i|d0d1d2d3d4gƒtg} tt|ƒƒD]%\} } | tt| ƒƒ| fqƒ~ dtƒd }|i|d5d6d7gƒd tfd!„ƒY‰d‡d"†}dtd#„}|iˆ||dƒƒ|iˆ||d ƒƒd$f‡d%†ƒY}|ƒ|ƒdg}|iˆ||d&tƒ|iˆ||ƒ‡‡d'†‰dˆ_|iˆ|dgˆƒd ˆ_|iˆ|ddgˆƒdS(8NtkeyRcCs|S(N(R(R((RtKsi iii ii ii iiiiiiiicCs|dS(Ni(tr(R1((RR0QscCs|dS(Ni(R1(R1((RR0YscCs|dS(Ni(R1(R1((RR0ZscCs|dS(Ni(R1(R1((RR0bst abracadabraR#R$R%tdR1itreverset ExpectedErrorcBstZRS(N(RR(((RR5wsc#s%xt|ƒD] }dVq Wˆ‚dS(Ntyo(trangeRRR5(RR(R5(Rt delayed_raiseys cCs4g}t||ƒD]\}}|||ƒq~S(N(t_[1]tgroupbytiterabletkeyptktgtfunc(R;R<R?R>R=R9((Rtgulp}stDummyCmpcstZ‡d†ZRS(Ncs ˆ‚dS(N(R5(R tdst(R5(Rt__cmp__‡s(RRRC((R5(RRA†sR?cs1ˆidjoˆid8_|Snˆ‚dS(Nii(tkeyfunctskiptobjR5(RF(RDR5(RRD‘s(ii i(ii i(ii i(ii i(iii(iii(iii(iii(iR#(iR$(iR%(iR3(iR1(iR#(iR1(iR$( R RRR:tidR R!tNonetstdupR=R>telemtappendtiktigR9tkeystsetR1t expectedkeystlentsortedRtTruet ExceptionR5R8R@RARDRE(R R8RMRDRNR@R5RQRJROR>R=RKR9RIR1RA((RDR5Rt test_groupbyEsh"   3+3PEU  c Cs|ittttdƒƒƒdddgƒ|ittddddddgƒƒddgƒ|itdtttƒƒƒddddgƒ|i t tƒ|i t td„ƒ|i t td„tdƒdƒ|i t ttd ƒ|i t ttdƒtdƒƒi ƒdS( NiiiiicCs|S(N(R(R((RR0£scCs|S(N(R(R((RR0¤sii( R RRtifilterR R7RHRR'R R!R(R ((Rt test_ifilteržs.41"c Cs |ittttdƒƒƒdddgƒ|ittddddddgƒƒdddgƒ|itdtttƒƒƒddddgƒ|i t tƒ|i t td „ƒ|i t td „tdƒdƒ|i t ttdƒ|i t ttdƒtdƒƒi ƒdS( NiiiiiiiicCs|S(N(R(R((RR0­scCs|S(N(R(R((RR0®s( R RRt ifilterfalseR R7RHRR'R R!R(R ((Rttest_ifilterfalse¨s.71"cCs\g}tdtƒƒD]\}}|||fq~}|i|d d dgƒ|ittdt dƒƒƒt dt dƒƒƒ|ittd t d ƒƒƒt d t d ƒƒƒ|it d td tƒƒƒt d t d ƒƒƒ|ittd ƒƒt d ƒƒ|ittƒƒt ƒƒ|i t td ƒ|i t tt d ƒd ƒ|ig}tdd ƒD]}|tt|ƒƒqu~t dd ƒƒ|ig}tdd ƒD] }||q¾~t dd ƒƒtttdd ƒƒ}|it|ƒt|ƒƒttttdd ƒƒƒ}|itti|ƒƒt|ƒƒdS(NRR#iR$iR%iiRiR(R#i(R$i(R%i(R9tizipR'RtytansR RRR7R&RR R!tpairttupletmapRGtidstmintmaxRRtdicttfromkeys(R RaR9R^R]R\R((Rt test_izip²s"9444"9-cCsn|ittdƒtdƒƒd ddgƒ|ittddƒƒdddgƒ|itdtdƒƒdddgƒ|ittddƒƒgƒ|ittddƒƒgƒ|ittƒ|ittdddƒ|ittddƒtddƒ}|it |ƒd ƒtddd ƒ}|it |ƒd ƒt|ƒ|it |ƒd ƒdS(NiR#iiiiýÿÿÿix0.00.0srepeat((1+0j))isrepeat((1+0j), 5)srepeat((1+0j), 0)(iR#(iR#(iR#( R RR&txrangetrepeatRRR R!RHR1R*(R R1((Rt test_repeatÆs(( cCsŽ|itttitdƒtddƒƒƒddddddgƒ|ittddtdƒƒƒd ddgƒ|ittddtƒƒƒdddgƒ|it dtddtƒƒƒddgƒ|itttigƒƒgƒ|i t tƒ|i t tti ƒ|i t td tdƒƒi ƒ|i tttd gdgƒi ƒ|i t ttd gdgƒi ƒdS(NiiiiiRiR#R$R%i i(R#i(R$i(R%i(R#i(R$i(R%i(R#i(R$i(R RRtimaptoperatortpowR7RHR'RR R!tnegRRRR(R ((Rt test_imap×s-!! ""%c Csu|itttittdƒtddƒƒƒƒddddddgƒ|itdttit t ƒt dƒƒƒƒddddddgƒ|itttigƒƒgƒ|i t tttiddggƒƒ|i t tƒ|i t ttid gdƒ|i t td d gƒi ƒ|i tttd gƒi ƒ|i t ttd gƒi ƒdS(Niiiiiiitextrai (ii(ii(ii(ii(R RRtstarmapRkRlR&R7RR[R'R R!RRRR(R ((Rt test_starmapçs30"(cCsÔxHd ddddgD]1}|itttdƒ|Œƒt|ŒƒqWxZddfddfddfgD]7\}}|itttdƒ|Œƒt|ŒƒqmW|itttdƒdƒƒtdƒƒ|itttdƒddƒƒtddƒƒ|itttdƒdddƒƒtdddƒƒ|i t ttdƒƒ|i t ttdƒddddƒ|i t ttdƒd ddƒ|i t ttdƒdd d ƒ|i t ttdƒddd ƒ|i t ttdƒddd ƒ|i t ttdƒd ƒ|i t ttdƒd dƒ|i t ttdƒdd ƒ|i t ttdƒd ddƒ|i t ttdƒdd dƒ|it ttt ƒddtiƒƒƒdƒdS(Ni iiidiniiiiûÿÿÿiÿÿÿÿiR#(i ii(i ii(i i(i i(i(i ini(i idi(i in(i id(in(id(RR RRRRgR7ttgtargsRHR R!RRRR'R(R)(R RRr((Rt test_isliceôs*/" /+17%""""""cCsHddddddddg}d „}|itt||ƒƒdddgƒ|itt|gƒƒgƒ|ittƒ|ittti ƒ|ittti d gd ƒ|ittd dgƒi ƒ|it tt dgƒi ƒtt dddd d d gƒ}|it|ƒdddgƒ|it|i ƒdS(NiiiiiiiicCs |djS(Ni (R(R((RR0sRoi i(ii(ii(ii(tdatatundertenR RRt takewhileR R!RkRlRRRtboolttR(R RuRxRt((Rttest_takewhiles (!cCsûddddddddg}d „}|itt||ƒƒdddddgƒ|itt|gƒƒgƒ|ittƒ|ittti ƒ|ittti d gd ƒ|ittd d gƒi ƒ|it tt dgƒi ƒdS(NiiiiiiiicCs |djS(Ni (R(R((RR0(sRoi (ii(ii(ii( RtRuR RRt dropwhileR R!RkRlRRR(R RuRt((Rttest_dropwhile&s .cCs“d}d„}tgƒ\}} |it|ƒgƒ|it| ƒgƒt||ƒƒ\}} |it|| ƒtt |ƒt |ƒƒƒt||ƒƒ\}} |it|ƒt |ƒƒ|it| ƒt |ƒƒt||ƒƒ\}} x*t dƒD]} |i|i ƒ| ƒqW~|it| ƒt |ƒƒt||ƒƒ\}} x*t dƒD]} |i|i ƒ| ƒqlW~ |it|ƒt d|ƒƒx½t dƒD]¯} dg|dg|}ti|ƒggf}t||ƒƒ}x/|D]'} || i ƒ}|| i|ƒq W|i|dt |ƒƒ|i|dt |ƒƒq»W|ittƒ|ittdƒ|ittddgd ƒ|ittddgdd ƒtd ƒ\}} t|ƒd ƒ}|it|ƒtd ƒƒtt d ƒdƒ\}} }x*t dƒD]} |i|i ƒ| ƒq7W|it| ƒt d ƒƒ|i|i ƒ|i ƒgt dƒƒ|it|ƒt dd ƒƒ|it|ƒt dd ƒƒ|ittd d ƒxut dƒD]g}td |ƒ}|it|ƒtƒ|it|ƒ|ƒ|itt|ƒtd ƒg|ƒqüWtd ƒ\}} t|ƒ\}} |i||jƒtd ƒ\}}t|ƒ} |it| ƒ|it| dƒ| |ƒ}|it|ƒt|ƒjo"t|ƒjotd ƒjnƒtt dƒƒ\}} t#|ƒ}|it%|dƒt| ƒƒ~|it&t%|dƒdS(NiÈccsxt|ƒD] }|Vq WdS(N(RgRR(RR((Rtirange3s idiiiiiRRRiÐtinvalidi t __class__('RR|tteeR#R$R RRR&R7RgRRtjtordertrandomtshuffletliststitstvalueRLR R!ttypeR%tresultR_RRR`R3tassert_tt1tt2ttnewtt3tproxytptgetattrtReferenceError(R RˆRŠR…R‹R„R|R#R%R$R3RRŒR€RR†RRR((Rttest_tee1sŒ .      ( *  H cCsš|ittƒiƒxOttttfD];}|it|gƒiƒ|it|t ƒƒiƒq)W|itt gdƒiƒ|itt t ƒdƒiƒt gƒ\}}|it|iƒ|it|iƒt t ƒƒ\}}|it|iƒ|it|iƒ|ittddƒiƒxattttttfD]G}|it|d„gƒiƒ|it|d„t ƒƒiƒqKWdS(NicCs|S(N(R(R((RR0scCs|S(N(R(R((RR0žs(R R RR[RRR-R:tfR RRHRRtqRhRWRYRjRvRzRp(R R”R“R((Rttest_StopIteration‰s$ (RRR"R+R.RVRXRZRfRiRnRqRsRyR{R’R•(((RR)s   Y    $  XtTestGCcBs}tZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „ZRS(NcCs!|i|ƒ|iƒ~~dS(N(t containerRLtiteratorR(R R˜R—((Rt makecycle¢s  cCs g}|it|ƒ|ƒdS(N(R#R R™R(R R#((RR"§scCs'g}|it|gdƒ|ƒdS(Ni(R#R R™R-(R R#((RR.«scCs,g}|ittd||gƒ|ƒdS(Ni(R#R R™RzRw(R R#((RR{¯scCs-g}|it|gdd„ƒ|ƒdS(NicCs|S(N(R(R((RR0µs(R#R R™R:(R R#((RRV³scCs-g}|itd„|gdƒ|ƒdS(NcCstS(N(RT(R((RR0¹si(R#R R™RW(R R#((RRX·scCs&g}|itd„|ƒ|ƒdS(NcCstS(N(tFalse(R((RR0½s(R#R R™RY(R R#((RRZ»scCs1g}|it|gd|gdƒ|ƒdS(Nii(R#R R™R[(R R#((RRf¿scCs-g}|itd„|gdƒ|ƒdS(NcCs|S(N(R(R((RR0Åsi(R#R R™Rj(R R#((RRnÃscCs*g}|it|gddƒ|ƒdS(Ni(R#R R™RRH(R R#((RRsÇscCs g}|it|ƒ|ƒdS(N(R#R R™Rh(R R#((RRiËscCs3g}|itd„||fgdƒ|ƒdS(NcGs|S(N(Rx(Rx((RR0Ñsi(R#R R™Rp(R R#((RRqÏscCs/g}|ittdd||gƒ|ƒdS(Nii(R#R R™RvRw(R R#((RRyÓs(RRR™R"R.R{RVRXRZRfRnRsRiRqRy(((RR– s            ccsx|D] }|VqWdS(sRegular generatorN(tseqnR(R›R((RtR×stGcBs tZdZd„Zd„ZRS(sSequence using __getitem__cCs ||_dS(N(R›R (R R›((Rt__init__ÞscCs |i|S(N(R R›R(R R((Rt __getitem__às(RRRRžRŸ(((RRÜs  tIcBs)tZdZd„Zd„Zd„ZRS(s Sequence using iterator protocolcCs||_d|_dS(Ni(R›R R(R R›((RRžås cCs|S(N(R (R ((RR èscCsF|it|iƒjo t‚n|i|i}|id7_|S(Ni(R RRRR›Rtv(R R¡((RRês  (RRRRžR R(((RR ãs   tIgcBs tZdZd„Zd„ZRS(s9Sequence using iterator protocol defined with a generatorcCs||_d|_dS(Ni(R›R R(R R›((RRžòs ccsx|iD] }|Vq WdS(N(R R›tval(R R£((RR õs (RRRRžR (((RR¢ðs  tXcBs tZdZd„Zd„ZRS(s Missing __getitem__ and __iter__cCs||_d|_dS(Ni(R›R R(R R›((RRžûs cCsF|it|iƒjo t‚n|i|i}|id7_|S(Ni(R RRRR›RR¡(R R¡((RRþs  (RRRRžR(((RR¤ùs  tNcBs tZdZd„Zd„ZRS(sIterator missing next()cCs||_d|_dS(Ni(R›R R(R R›((RRžs cCs|S(N(R (R ((RR s(RRRRžR (((RR¥s  tEcBs)tZdZd„Zd„Zd„ZRS(sTest propagation of exceptionscCs||_d|_dS(Ni(R›R R(R R›((RRžs cCs|S(N(R (R ((RR scCs dddS(Nii((R ((RRs(RRRRžR R(((RR¦ s   tScBs)tZdZd„Zd„Zd„ZRS(sTest immediate stopcCsdS(N((R R›((RRžscCs|S(N(R (R ((RR scCs t‚dS(N(R(R ((RRs(RRRRžR R(((RR§s   cCs(ttd„ttt|ƒƒƒƒƒS(s Test multiple tiers of iteratorscCs|S(N(R(R((RR0!sN(RRjRœR¢RR›(R›((RtLstTestVariousIteratorArgscBsttZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z RS( NcCs%xddtdƒd tdddƒfD]õ}x•ttttttfD]{}|i t t ||ƒƒƒt ||ƒƒƒ|i t t ||ƒ||ƒƒƒt ||ƒƒt ||ƒƒƒqGW|itt t|ƒƒ|itt t t|ƒƒƒ|itt t t|ƒƒƒq(WdS( Nt123Riètdof1.2iÐi˜i(R«f1.2(R7RgRIRR R¢R§R¨RœR>R RRRR R!R¤R¥tZeroDivisionErrorR¦(R R>RI((RR"&s(.KcCsxddtdƒd tdddƒfD]×}xwttttttfD]]}t |ƒd }t ||ƒƒd }t tt||ƒƒ|ƒƒ}|i||ƒqGW|ittt|ƒƒ|itt tt|ƒƒƒ|itt tt|ƒƒƒq(WdS( NRªRièR«f1.2iÐi˜ii(sdof1.2(R7RgRIRR R¢R§R¨RœR>RRttgtlenRtexpectedRR-tactualR RR R!R¤R¥R¬R¦(R R­R®R¯R>RI((RR./s(!cCsxþtdƒtdƒtdƒd tdddƒfD]É}xittttttfD]O}|i g}t ||ƒƒD]\}}||qv~t||ƒƒƒqSW|itt t|ƒƒ|ittt t|ƒƒƒ|ittt t|ƒƒƒq4WdS( Ni iièii iÐi˜i(ii (R7RgRIRR R¢R§R¨RœR>R RR9R:R=tsbRR R!R¤R¥R¬R¦(R R>RIR9R°R=((RRV:s4McCsùxòtdƒtdƒtdƒd tdddƒfD]½}xTttttttfD]:}|i t t t||ƒƒƒtt||ƒƒƒqSW|itt tt|ƒƒ|itt t tt|ƒƒƒ|itt t tt|ƒƒƒq4WdS( Ni iièii iÐi˜i(ii (R7RgRIRR R¢R§R¨RœR>R RRRWR tfilterR R!R¤R¥R¬R¦(R R>RI((RRXBs48"cCsùxòtdƒtdƒtdƒd tdddƒfD]½}xTttttttfD]:}|i t t t||ƒƒƒtt||ƒƒƒqSW|itt tt|ƒƒ|itt t tt|ƒƒƒ|itt t tt|ƒƒƒq4WdS( Ni iièii iÐi˜i(ii (R7RgRIRR R¢R§R¨RœR>R RRRYR R±R R R!R¤R¥R¬R¦(R R>RI((RRZJs48"cCsxddtdƒd tdddƒfD]î}xŽttttttfD]t}|i t t ||ƒƒƒt||ƒƒƒ|i t t ||ƒ||ƒƒƒt||ƒ||ƒƒƒqGW|itt t|ƒƒ|itt t t|ƒƒƒ|itt t t|ƒƒƒq(WdS( NRªRièR«f1.2iÐi˜i(sdof1.2(R7RgRIRR R¢R§R¨RœR>R RRR[R&R R!R¤R¥R¬R¦(R R>RI((RRfRs(.Dc CsEx>tdƒtdƒtdƒd tdddƒfD] }x ttttttfD]†}|i t t t||ƒƒƒtt||ƒƒƒ|i t t ti||ƒ||ƒƒƒtti||ƒ||ƒƒƒqSW|itt tt|ƒƒ|itt t tt|ƒƒƒ|itt t tt|ƒƒƒq4WdS( Ni iidii ii2i(ii (R7RgRIRR R¢R§R¨RœR>R RRRjRR`RkRlR R!R¤R¥R¬R¦(R R>RI((RRn[s44P"c Csýxöddtdƒd tdddƒfD]Í}xdttttttfD]J}|i t t ||ƒd dd ƒƒt ||ƒƒd dd …ƒqGW|itt t|ƒd ƒ|itt t t|ƒd ƒƒ|itt t t|ƒd ƒƒq(WdS( Nt12345RièR«f1.2iÐi˜iiii (sdof1.2(R7RgRIRR R¢R§R¨RœR>R RRRRHR R!R¤R¥R¬R¦(R R>RI((RRsds(H"c Cs xtdƒtdƒtdƒd tdddƒfD]ä}xrttttttfD]X}t ||ƒ}|i ttti||ƒƒƒtti||ƒ||ƒƒƒqSW|itttit|ƒƒ|ittttit|ƒƒƒ|ittttit|ƒƒƒq4WdS( Ni iidii ii2i(ii (R7RgRIRR R¢R§R¨RœR>R&tssR RRRpRkRlR`R R!R¤R¥R¬R¦(R R>R³RI((RRqls4G%cCs&xtdƒtdƒtdƒd tdddƒfD]ê}xttttttfD]g}g}x3||ƒD]%}t |ƒpPn|i |ƒqlW|ittt ||ƒƒƒ|ƒqSW|ittt t|ƒƒ|itttt t|ƒƒƒ|itttt t|ƒƒƒq4WdS( Ni iièii iÐi˜i(ii (R7RgRIRR R¢R§R¨RœR>ttgtRKR RLR RRRvR R!R¤R¥R¬R¦(R R´R>RIRK((RRyus4  )"cCs0x)tdƒtdƒtdƒd tdddƒfD]ô}x‹ttttttfD]q}g}x=||ƒD]/}| ot |ƒoqln|i |ƒqlW|ittt ||ƒƒƒ|ƒqSW|ittt t|ƒƒ|itttt t|ƒƒƒ|itttt t|ƒƒƒq4WdS( Ni iièii iÐi˜i(ii (R7RgRIRR R¢R§R¨RœR>R´RKR RLR RRRzR R!R¤R¥R¬R¦(R R´R>RIRK((RR{s4 )"cCsx ddtdƒd tdddƒfD]ä}x|ttttttfD]b}t ||ƒƒ\}}|it|ƒt||ƒƒƒ|it|ƒt||ƒƒƒqGW|itt t|ƒƒ|ittt t|ƒƒd ƒ|ittt t|ƒƒd ƒq(WdS( NRªRièR«f1.2iÐi˜ii(sdof1.2(R7RgRIRR R¢R§R¨RœR>Rtit1tit2R RRR R!R¤R¥R¬R¦(R R>RIR¶Rµ((RR’s("&#(RRR"R.RVRXRZRfRnRsRqRyR{R’(((RR©$s     tLengthTransparencycBstZd„ZRS(NcCs<|ittddƒƒdƒ|itttdƒƒdS(Ni2(R RRRRhRHR R!(R ((RRi™s(RRRi(((RR·—stRegressionTestscBstZd„Zd„ZRS(NcsKd„}‡d†}g‰|d |d ƒttƒ}|iˆ|ƒdS( Ncsjdg‡‡d†}t|ƒ}t|ƒ|dd+t||ƒ}t|gt|ƒŒ‰ˆi ƒdS(Nics#|o|2ˆˆiƒƒn|S(N(tfirstR“tzRR†(R†R¹(R“Rº(RR>¦s( R>Rttuple2titemsttuple1RjtgenR[RRRºR(R½R“R»R>R¼RºR¾((R“RºRt mutatingtuple¢s  cs|attƒˆ(dS(N(RxtTRR¹(Rx(R¹(RR“±siiiiii(iii(iii(R¿R“R¹RRÀtsecondR R(R R“RÁR¿R¹((R¹Rttest_sf_793826Ÿs    c sÖ‡d†}‡d†}g‰|ittt|ƒ|tƒƒƒ|i ˆddgƒg‰|ittt|ƒ|t ƒƒƒ|i ˆddgƒg‰|ittt |ƒƒƒ|i ˆddgƒdS(Nc#s5ˆidƒdVˆidƒt‚ˆidƒdS(Niii(thistRLtAssertionError((RÃ(Rtgen1Às   c#s3ˆidƒdVˆidƒ|o t‚ndS(Niii(RÃRLRR(R(RÃ(Rtgen2Çs   ii( RÅRÆRÃR R RÄRRRšRRTR-(R RÆRÅRÃ((RÃRttest_sf_950057¼s  %%(RRRÂRÇ(((RR¸s s™ Doctest for examples in the library reference: libitertools.tex >>> amounts = [120.15, 764.05, 823.14] >>> for checknum, amount in izip(count(1200), amounts): ... print 'Check %d is for $%.2f' % (checknum, amount) ... Check 1200 is for $120.15 Check 1201 is for $764.05 Check 1202 is for $823.14 >>> import operator >>> for cube in imap(operator.pow, xrange(1,4), repeat(3)): ... print cube ... 1 8 27 >>> reportlines = ['EuroPython', 'Roster', '', 'alex', '', 'laura', '', 'martin', '', 'walter', '', 'samuele'] >>> for name in islice(reportlines, 3, None, 2): ... print name.title() ... Alex Laura Martin Walter Samuele >>> from operator import itemgetter >>> d = dict(a=1, b=2, c=1, d=2, e=1, f=2, g=3) >>> di = sorted(sorted(d.iteritems()), key=itemgetter(1)) >>> for k, g in groupby(di, itemgetter(1)): ... print k, map(itemgetter(0), g) ... 1 ['a', 'c', 'e'] 2 ['b', 'd', 'f'] 3 ['g'] # Find runs of consecutive numbers using groupby. The key to the solution # is differencing with a range so that consecutive numbers all appear in # same group. >>> data = [ 1, 4,5,6, 10, 15,16,17,18, 22, 25,26,27,28] >>> for k, g in groupby(enumerate(data), lambda (i,x):i-x): ... print map(operator.itemgetter(1), g) ... [1] [4, 5, 6] [10] [15, 16, 17, 18] [22] [25, 26, 27, 28] >>> def take(n, seq): ... return list(islice(seq, n)) >>> def enumerate(iterable): ... return izip(count(), iterable) >>> def tabulate(function): ... "Return function(0), function(1), ..." ... return imap(function, count()) >>> def iteritems(mapping): ... return izip(mapping.iterkeys(), mapping.itervalues()) >>> def nth(iterable, n): ... "Returns the nth item" ... return list(islice(iterable, n, n+1)) >>> def all(seq, pred=bool): ... "Returns True if pred(x) is True for every element in the iterable" ... for elem in ifilterfalse(pred, seq): ... return False ... return True >>> def any(seq, pred=bool): ... "Returns True if pred(x) is True for at least one element in the iterable" ... for elem in ifilter(pred, seq): ... return True ... return False >>> def no(seq, pred=bool): ... "Returns True if pred(x) is False for every element in the iterable" ... for elem in ifilter(pred, seq): ... return False ... return True >>> def quantify(seq, pred=bool): ... "Count how many times the predicate is True in the sequence" ... return sum(imap(pred, seq)) >>> def padnone(seq): ... "Returns the sequence elements and then returns None indefinitely" ... return chain(seq, repeat(None)) >>> def ncycles(seq, n): ... "Returns the sequence elements n times" ... return chain(*repeat(seq, n)) >>> def dotproduct(vec1, vec2): ... return sum(imap(operator.mul, vec1, vec2)) >>> def flatten(listOfLists): ... return list(chain(*listOfLists)) >>> def repeatfunc(func, times=None, *args): ... "Repeat calls to func with specified arguments." ... " Example: repeatfunc(random.random)" ... if times is None: ... return starmap(func, repeat(args)) ... else: ... return starmap(func, repeat(args, times)) >>> def pairwise(iterable): ... "s -> (s0,s1), (s1,s2), (s2, s3), ..." ... a, b = tee(iterable) ... try: ... b.next() ... except StopIteration: ... pass ... return izip(a, b) This is not part of the examples but it tests to make sure the definitions perform as purported. >>> take(10, count()) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(enumerate('abc')) [(0, 'a'), (1, 'b'), (2, 'c')] >>> list(islice(tabulate(lambda x: 2*x), 4)) [0, 2, 4, 6] >>> nth('abcde', 3) ['d'] >>> all([2, 4, 6, 8], lambda x: x%2==0) True >>> all([2, 3, 6, 8], lambda x: x%2==0) False >>> any([2, 4, 6, 8], lambda x: x%2==0) True >>> any([1, 3, 5, 9], lambda x: x%2==0,) False >>> no([1, 3, 5, 9], lambda x: x%2==0) True >>> no([1, 2, 5, 9], lambda x: x%2==0) False >>> quantify(xrange(99), lambda x: x%2==0) 50 >>> a = [[1, 2, 3], [4, 5, 6]] >>> flatten(a) [1, 2, 3, 4, 5, 6] >>> list(repeatfunc(pow, 5, 2, 3)) [8, 8, 8, 8, 8] >>> import random >>> take(5, imap(int, repeatfunc(random.random))) [0, 0, 0, 0, 0] >>> list(pairwise('abcd')) [('a', 'b'), ('b', 'c'), ('c', 'd')] >>> list(pairwise([])) [] >>> list(pairwise('a')) [] >>> list(islice(padnone('abc'), 0, 6)) ['a', 'b', 'c', None, None, None] >>> list(ncycles('abc', 3)) ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'] >>> dotproduct([1,2,3], [4,5,6]) 32 t libreftestcCs·tttttf}ti|Œ|ost t dƒocdk }dgd}xAtt|ƒƒD]-}ti|Œ|iƒt iƒ||