1 :mod:`itertools` --- Functions creating iterators for efficient looping 2 ======================================================================= 3 4 .. module:: itertools 5 :synopsis: Functions creating iterators for efficient looping. 6 7 .. moduleauthor:: Raymond Hettinger <python (a] rcn.com> 8 .. sectionauthor:: Raymond Hettinger <python (a] rcn.com> 9 10 .. testsetup:: 11 12 from itertools import * 13 14 -------------- 15 16 This module implements a number of :term:`iterator` building blocks inspired 17 by constructs from APL, Haskell, and SML. Each has been recast in a form 18 suitable for Python. 19 20 The module standardizes a core set of fast, memory efficient tools that are 21 useful by themselves or in combination. Together, they form an "iterator 22 algebra" making it possible to construct specialized tools succinctly and 23 efficiently in pure Python. 24 25 For instance, SML provides a tabulation tool: ``tabulate(f)`` which produces a 26 sequence ``f(0), f(1), ...``. The same effect can be achieved in Python 27 by combining :func:`map` and :func:`count` to form ``map(f, count())``. 28 29 These tools and their built-in counterparts also work well with the high-speed 30 functions in the :mod:`operator` module. For example, the multiplication 31 operator can be mapped across two vectors to form an efficient dot-product: 32 ``sum(map(operator.mul, vector1, vector2))``. 33 34 35 **Infinite iterators:** 36 37 ================== ================= ================================================= ========================================= 38 Iterator Arguments Results Example 39 ================== ================= ================================================= ========================================= 40 :func:`count` start, [step] start, start+step, start+2*step, ... ``count(10) --> 10 11 12 13 14 ...`` 41 :func:`cycle` p p0, p1, ... plast, p0, p1, ... ``cycle('ABCD') --> A B C D A B C D ...`` 42 :func:`repeat` elem [,n] elem, elem, elem, ... endlessly or up to n times ``repeat(10, 3) --> 10 10 10`` 43 ================== ================= ================================================= ========================================= 44 45 **Iterators terminating on the shortest input sequence:** 46 47 ============================ ============================ ================================================= ============================================================= 48 Iterator Arguments Results Example 49 ============================ ============================ ================================================= ============================================================= 50 :func:`accumulate` p [,func] p0, p0+p1, p0+p1+p2, ... ``accumulate([1,2,3,4,5]) --> 1 3 6 10 15`` 51 :func:`chain` p, q, ... p0, p1, ... plast, q0, q1, ... ``chain('ABC', 'DEF') --> A B C D E F`` 52 :func:`chain.from_iterable` iterable p0, p1, ... plast, q0, q1, ... ``chain.from_iterable(['ABC', 'DEF']) --> A B C D E F`` 53 :func:`compress` data, selectors (d[0] if s[0]), (d[1] if s[1]), ... ``compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F`` 54 :func:`dropwhile` pred, seq seq[n], seq[n+1], starting when pred fails ``dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1`` 55 :func:`filterfalse` pred, seq elements of seq where pred(elem) is false ``filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8`` 56 :func:`groupby` iterable[, key] sub-iterators grouped by value of key(v) 57 :func:`islice` seq, [start,] stop [, step] elements from seq[start:stop:step] ``islice('ABCDEFG', 2, None) --> C D E F G`` 58 :func:`starmap` func, seq func(\*seq[0]), func(\*seq[1]), ... ``starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000`` 59 :func:`takewhile` pred, seq seq[0], seq[1], until pred fails ``takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4`` 60 :func:`tee` it, n it1, it2, ... itn splits one iterator into n 61 :func:`zip_longest` p, q, ... (p[0], q[0]), (p[1], q[1]), ... ``zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-`` 62 ============================ ============================ ================================================= ============================================================= 63 64 **Combinatoric iterators:** 65 66 ============================================== ==================== ============================================================= 67 Iterator Arguments Results 68 ============================================== ==================== ============================================================= 69 :func:`product` p, q, ... [repeat=1] cartesian product, equivalent to a nested for-loop 70 :func:`permutations` p[, r] r-length tuples, all possible orderings, no repeated elements 71 :func:`combinations` p, r r-length tuples, in sorted order, no repeated elements 72 :func:`combinations_with_replacement` p, r r-length tuples, in sorted order, with repeated elements 73 ``product('ABCD', repeat=2)`` ``AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD`` 74 ``permutations('ABCD', 2)`` ``AB AC AD BA BC BD CA CB CD DA DB DC`` 75 ``combinations('ABCD', 2)`` ``AB AC AD BC BD CD`` 76 ``combinations_with_replacement('ABCD', 2)`` ``AA AB AC AD BB BC BD CC CD DD`` 77 ============================================== ==================== ============================================================= 78 79 80 .. _itertools-functions: 81 82 Itertool functions 83 ------------------ 84 85 The following module functions all construct and return iterators. Some provide 86 streams of infinite length, so they should only be accessed by functions or 87 loops that truncate the stream. 88 89 .. function:: accumulate(iterable[, func]) 90 91 Make an iterator that returns accumulated sums, or accumulated 92 results of other binary functions (specified via the optional 93 *func* argument). If *func* is supplied, it should be a function 94 of two arguments. Elements of the input *iterable* may be any type 95 that can be accepted as arguments to *func*. (For example, with 96 the default operation of addition, elements may be any addable 97 type including :class:`~decimal.Decimal` or 98 :class:`~fractions.Fraction`.) If the input iterable is empty, the 99 output iterable will also be empty. 100 101 Roughly equivalent to:: 102 103 def accumulate(iterable, func=operator.add): 104 'Return running totals' 105 # accumulate([1,2,3,4,5]) --> 1 3 6 10 15 106 # accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120 107 it = iter(iterable) 108 try: 109 total = next(it) 110 except StopIteration: 111 return 112 yield total 113 for element in it: 114 total = func(total, element) 115 yield total 116 117 There are a number of uses for the *func* argument. It can be set to 118 :func:`min` for a running minimum, :func:`max` for a running maximum, or 119 :func:`operator.mul` for a running product. Amortization tables can be 120 built by accumulating interest and applying payments. First-order 121 `recurrence relations <https://en.wikipedia.org/wiki/Recurrence_relation>`_ 122 can be modeled by supplying the initial value in the iterable and using only 123 the accumulated total in *func* argument:: 124 125 >>> data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8] 126 >>> list(accumulate(data, operator.mul)) # running product 127 [3, 12, 72, 144, 144, 1296, 0, 0, 0, 0] 128 >>> list(accumulate(data, max)) # running maximum 129 [3, 4, 6, 6, 6, 9, 9, 9, 9, 9] 130 131 # Amortize a 5% loan of 1000 with 4 annual payments of 90 132 >>> cashflows = [1000, -90, -90, -90, -90] 133 >>> list(accumulate(cashflows, lambda bal, pmt: bal*1.05 + pmt)) 134 [1000, 960.0, 918.0, 873.9000000000001, 827.5950000000001] 135 136 # Chaotic recurrence relation https://en.wikipedia.org/wiki/Logistic_map 137 >>> logistic_map = lambda x, _: r * x * (1 - x) 138 >>> r = 3.8 139 >>> x0 = 0.4 140 >>> inputs = repeat(x0, 36) # only the initial value is used 141 >>> [format(x, '.2f') for x in accumulate(inputs, logistic_map)] 142 ['0.40', '0.91', '0.30', '0.81', '0.60', '0.92', '0.29', '0.79', '0.63', 143 '0.88', '0.39', '0.90', '0.33', '0.84', '0.52', '0.95', '0.18', '0.57', 144 '0.93', '0.25', '0.71', '0.79', '0.63', '0.88', '0.39', '0.91', '0.32', 145 '0.83', '0.54', '0.95', '0.20', '0.60', '0.91', '0.30', '0.80', '0.60'] 146 147 See :func:`functools.reduce` for a similar function that returns only the 148 final accumulated value. 149 150 .. versionadded:: 3.2 151 152 .. versionchanged:: 3.3 153 Added the optional *func* parameter. 154 155 .. function:: chain(*iterables) 156 157 Make an iterator that returns elements from the first iterable until it is 158 exhausted, then proceeds to the next iterable, until all of the iterables are 159 exhausted. Used for treating consecutive sequences as a single sequence. 160 Roughly equivalent to:: 161 162 def chain(*iterables): 163 # chain('ABC', 'DEF') --> A B C D E F 164 for it in iterables: 165 for element in it: 166 yield element 167 168 169 .. classmethod:: chain.from_iterable(iterable) 170 171 Alternate constructor for :func:`chain`. Gets chained inputs from a 172 single iterable argument that is evaluated lazily. Roughly equivalent to:: 173 174 def from_iterable(iterables): 175 # chain.from_iterable(['ABC', 'DEF']) --> A B C D E F 176 for it in iterables: 177 for element in it: 178 yield element 179 180 181 .. function:: combinations(iterable, r) 182 183 Return *r* length subsequences of elements from the input *iterable*. 184 185 Combinations are emitted in lexicographic sort order. So, if the 186 input *iterable* is sorted, the combination tuples will be produced 187 in sorted order. 188 189 Elements are treated as unique based on their position, not on their 190 value. So if the input elements are unique, there will be no repeat 191 values in each combination. 192 193 Roughly equivalent to:: 194 195 def combinations(iterable, r): 196 # combinations('ABCD', 2) --> AB AC AD BC BD CD 197 # combinations(range(4), 3) --> 012 013 023 123 198 pool = tuple(iterable) 199 n = len(pool) 200 if r > n: 201 return 202 indices = list(range(r)) 203 yield tuple(pool[i] for i in indices) 204 while True: 205 for i in reversed(range(r)): 206 if indices[i] != i + n - r: 207 break 208 else: 209 return 210 indices[i] += 1 211 for j in range(i+1, r): 212 indices[j] = indices[j-1] + 1 213 yield tuple(pool[i] for i in indices) 214 215 The code for :func:`combinations` can be also expressed as a subsequence 216 of :func:`permutations` after filtering entries where the elements are not 217 in sorted order (according to their position in the input pool):: 218 219 def combinations(iterable, r): 220 pool = tuple(iterable) 221 n = len(pool) 222 for indices in permutations(range(n), r): 223 if sorted(indices) == list(indices): 224 yield tuple(pool[i] for i in indices) 225 226 The number of items returned is ``n! / r! / (n-r)!`` when ``0 <= r <= n`` 227 or zero when ``r > n``. 228 229 .. function:: combinations_with_replacement(iterable, r) 230 231 Return *r* length subsequences of elements from the input *iterable* 232 allowing individual elements to be repeated more than once. 233 234 Combinations are emitted in lexicographic sort order. So, if the 235 input *iterable* is sorted, the combination tuples will be produced 236 in sorted order. 237 238 Elements are treated as unique based on their position, not on their 239 value. So if the input elements are unique, the generated combinations 240 will also be unique. 241 242 Roughly equivalent to:: 243 244 def combinations_with_replacement(iterable, r): 245 # combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC 246 pool = tuple(iterable) 247 n = len(pool) 248 if not n and r: 249 return 250 indices = [0] * r 251 yield tuple(pool[i] for i in indices) 252 while True: 253 for i in reversed(range(r)): 254 if indices[i] != n - 1: 255 break 256 else: 257 return 258 indices[i:] = [indices[i] + 1] * (r - i) 259 yield tuple(pool[i] for i in indices) 260 261 The code for :func:`combinations_with_replacement` can be also expressed as 262 a subsequence of :func:`product` after filtering entries where the elements 263 are not in sorted order (according to their position in the input pool):: 264 265 def combinations_with_replacement(iterable, r): 266 pool = tuple(iterable) 267 n = len(pool) 268 for indices in product(range(n), repeat=r): 269 if sorted(indices) == list(indices): 270 yield tuple(pool[i] for i in indices) 271 272 The number of items returned is ``(n+r-1)! / r! / (n-1)!`` when ``n > 0``. 273 274 .. versionadded:: 3.1 275 276 277 .. function:: compress(data, selectors) 278 279 Make an iterator that filters elements from *data* returning only those that 280 have a corresponding element in *selectors* that evaluates to ``True``. 281 Stops when either the *data* or *selectors* iterables has been exhausted. 282 Roughly equivalent to:: 283 284 def compress(data, selectors): 285 # compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F 286 return (d for d, s in zip(data, selectors) if s) 287 288 .. versionadded:: 3.1 289 290 291 .. function:: count(start=0, step=1) 292 293 Make an iterator that returns evenly spaced values starting with number *start*. Often 294 used as an argument to :func:`map` to generate consecutive data points. 295 Also, used with :func:`zip` to add sequence numbers. Roughly equivalent to:: 296 297 def count(start=0, step=1): 298 # count(10) --> 10 11 12 13 14 ... 299 # count(2.5, 0.5) -> 2.5 3.0 3.5 ... 300 n = start 301 while True: 302 yield n 303 n += step 304 305 When counting with floating point numbers, better accuracy can sometimes be 306 achieved by substituting multiplicative code such as: ``(start + step * i 307 for i in count())``. 308 309 .. versionchanged:: 3.1 310 Added *step* argument and allowed non-integer arguments. 311 312 .. function:: cycle(iterable) 313 314 Make an iterator returning elements from the iterable and saving a copy of each. 315 When the iterable is exhausted, return elements from the saved copy. Repeats 316 indefinitely. Roughly equivalent to:: 317 318 def cycle(iterable): 319 # cycle('ABCD') --> A B C D A B C D A B C D ... 320 saved = [] 321 for element in iterable: 322 yield element 323 saved.append(element) 324 while saved: 325 for element in saved: 326 yield element 327 328 Note, this member of the toolkit may require significant auxiliary storage 329 (depending on the length of the iterable). 330 331 332 .. function:: dropwhile(predicate, iterable) 333 334 Make an iterator that drops elements from the iterable as long as the predicate 335 is true; afterwards, returns every element. Note, the iterator does not produce 336 *any* output until the predicate first becomes false, so it may have a lengthy 337 start-up time. Roughly equivalent to:: 338 339 def dropwhile(predicate, iterable): 340 # dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1 341 iterable = iter(iterable) 342 for x in iterable: 343 if not predicate(x): 344 yield x 345 break 346 for x in iterable: 347 yield x 348 349 .. function:: filterfalse(predicate, iterable) 350 351 Make an iterator that filters elements from iterable returning only those for 352 which the predicate is ``False``. If *predicate* is ``None``, return the items 353 that are false. Roughly equivalent to:: 354 355 def filterfalse(predicate, iterable): 356 # filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8 357 if predicate is None: 358 predicate = bool 359 for x in iterable: 360 if not predicate(x): 361 yield x 362 363 364 .. function:: groupby(iterable, key=None) 365 366 Make an iterator that returns consecutive keys and groups from the *iterable*. 367 The *key* is a function computing a key value for each element. If not 368 specified or is ``None``, *key* defaults to an identity function and returns 369 the element unchanged. Generally, the iterable needs to already be sorted on 370 the same key function. 371 372 The operation of :func:`groupby` is similar to the ``uniq`` filter in Unix. It 373 generates a break or new group every time the value of the key function changes 374 (which is why it is usually necessary to have sorted the data using the same key 375 function). That behavior differs from SQL's GROUP BY which aggregates common 376 elements regardless of their input order. 377 378 The returned group is itself an iterator that shares the underlying iterable 379 with :func:`groupby`. Because the source is shared, when the :func:`groupby` 380 object is advanced, the previous group is no longer visible. So, if that data 381 is needed later, it should be stored as a list:: 382 383 groups = [] 384 uniquekeys = [] 385 data = sorted(data, key=keyfunc) 386 for k, g in groupby(data, keyfunc): 387 groups.append(list(g)) # Store group iterator as a list 388 uniquekeys.append(k) 389 390 :func:`groupby` is roughly equivalent to:: 391 392 class groupby: 393 # [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B 394 # [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D 395 def __init__(self, iterable, key=None): 396 if key is None: 397 key = lambda x: x 398 self.keyfunc = key 399 self.it = iter(iterable) 400 self.tgtkey = self.currkey = self.currvalue = object() 401 def __iter__(self): 402 return self 403 def __next__(self): 404 self.id = object() 405 while self.currkey == self.tgtkey: 406 self.currvalue = next(self.it) # Exit on StopIteration 407 self.currkey = self.keyfunc(self.currvalue) 408 self.tgtkey = self.currkey 409 return (self.currkey, self._grouper(self.tgtkey, self.id)) 410 def _grouper(self, tgtkey, id): 411 while self.id is id and self.currkey == tgtkey: 412 yield self.currvalue 413 try: 414 self.currvalue = next(self.it) 415 except StopIteration: 416 return 417 self.currkey = self.keyfunc(self.currvalue) 418 419 420 .. function:: islice(iterable, stop) 421 islice(iterable, start, stop[, step]) 422 423 Make an iterator that returns selected elements from the iterable. If *start* is 424 non-zero, then elements from the iterable are skipped until start is reached. 425 Afterward, elements are returned consecutively unless *step* is set higher than 426 one which results in items being skipped. If *stop* is ``None``, then iteration 427 continues until the iterator is exhausted, if at all; otherwise, it stops at the 428 specified position. Unlike regular slicing, :func:`islice` does not support 429 negative values for *start*, *stop*, or *step*. Can be used to extract related 430 fields from data where the internal structure has been flattened (for example, a 431 multi-line report may list a name field on every third line). Roughly equivalent to:: 432 433 def islice(iterable, *args): 434 # islice('ABCDEFG', 2) --> A B 435 # islice('ABCDEFG', 2, 4) --> C D 436 # islice('ABCDEFG', 2, None) --> C D E F G 437 # islice('ABCDEFG', 0, None, 2) --> A C E G 438 s = slice(*args) 439 start, stop, step = s.start or 0, s.stop or sys.maxsize, s.step or 1 440 it = iter(range(start, stop, step)) 441 try: 442 nexti = next(it) 443 except StopIteration: 444 # Consume *iterable* up to the *start* position. 445 for i, element in zip(range(start), iterable): 446 pass 447 return 448 try: 449 for i, element in enumerate(iterable): 450 if i == nexti: 451 yield element 452 nexti = next(it) 453 except StopIteration: 454 # Consume to *stop*. 455 for i, element in zip(range(i + 1, stop), iterable): 456 pass 457 458 If *start* is ``None``, then iteration starts at zero. If *step* is ``None``, 459 then the step defaults to one. 460 461 462 .. function:: permutations(iterable, r=None) 463 464 Return successive *r* length permutations of elements in the *iterable*. 465 466 If *r* is not specified or is ``None``, then *r* defaults to the length 467 of the *iterable* and all possible full-length permutations 468 are generated. 469 470 Permutations are emitted in lexicographic sort order. So, if the 471 input *iterable* is sorted, the permutation tuples will be produced 472 in sorted order. 473 474 Elements are treated as unique based on their position, not on their 475 value. So if the input elements are unique, there will be no repeat 476 values in each permutation. 477 478 Roughly equivalent to:: 479 480 def permutations(iterable, r=None): 481 # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC 482 # permutations(range(3)) --> 012 021 102 120 201 210 483 pool = tuple(iterable) 484 n = len(pool) 485 r = n if r is None else r 486 if r > n: 487 return 488 indices = list(range(n)) 489 cycles = list(range(n, n-r, -1)) 490 yield tuple(pool[i] for i in indices[:r]) 491 while n: 492 for i in reversed(range(r)): 493 cycles[i] -= 1 494 if cycles[i] == 0: 495 indices[i:] = indices[i+1:] + indices[i:i+1] 496 cycles[i] = n - i 497 else: 498 j = cycles[i] 499 indices[i], indices[-j] = indices[-j], indices[i] 500 yield tuple(pool[i] for i in indices[:r]) 501 break 502 else: 503 return 504 505 The code for :func:`permutations` can be also expressed as a subsequence of 506 :func:`product`, filtered to exclude entries with repeated elements (those 507 from the same position in the input pool):: 508 509 def permutations(iterable, r=None): 510 pool = tuple(iterable) 511 n = len(pool) 512 r = n if r is None else r 513 for indices in product(range(n), repeat=r): 514 if len(set(indices)) == r: 515 yield tuple(pool[i] for i in indices) 516 517 The number of items returned is ``n! / (n-r)!`` when ``0 <= r <= n`` 518 or zero when ``r > n``. 519 520 .. function:: product(*iterables, repeat=1) 521 522 Cartesian product of input iterables. 523 524 Roughly equivalent to nested for-loops in a generator expression. For example, 525 ``product(A, B)`` returns the same as ``((x,y) for x in A for y in B)``. 526 527 The nested loops cycle like an odometer with the rightmost element advancing 528 on every iteration. This pattern creates a lexicographic ordering so that if 529 the input's iterables are sorted, the product tuples are emitted in sorted 530 order. 531 532 To compute the product of an iterable with itself, specify the number of 533 repetitions with the optional *repeat* keyword argument. For example, 534 ``product(A, repeat=4)`` means the same as ``product(A, A, A, A)``. 535 536 This function is roughly equivalent to the following code, except that the 537 actual implementation does not build up intermediate results in memory:: 538 539 def product(*args, repeat=1): 540 # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy 541 # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 542 pools = [tuple(pool) for pool in args] * repeat 543 result = [[]] 544 for pool in pools: 545 result = [x+[y] for x in result for y in pool] 546 for prod in result: 547 yield tuple(prod) 548 549 550 .. function:: repeat(object[, times]) 551 552 Make an iterator that returns *object* over and over again. Runs indefinitely 553 unless the *times* argument is specified. Used as argument to :func:`map` for 554 invariant parameters to the called function. Also used with :func:`zip` to 555 create an invariant part of a tuple record. 556 557 Roughly equivalent to:: 558 559 def repeat(object, times=None): 560 # repeat(10, 3) --> 10 10 10 561 if times is None: 562 while True: 563 yield object 564 else: 565 for i in range(times): 566 yield object 567 568 A common use for *repeat* is to supply a stream of constant values to *map* 569 or *zip*:: 570 571 >>> list(map(pow, range(10), repeat(2))) 572 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 573 574 .. function:: starmap(function, iterable) 575 576 Make an iterator that computes the function using arguments obtained from 577 the iterable. Used instead of :func:`map` when argument parameters are already 578 grouped in tuples from a single iterable (the data has been "pre-zipped"). The 579 difference between :func:`map` and :func:`starmap` parallels the distinction 580 between ``function(a,b)`` and ``function(*c)``. Roughly equivalent to:: 581 582 def starmap(function, iterable): 583 # starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000 584 for args in iterable: 585 yield function(*args) 586 587 588 .. function:: takewhile(predicate, iterable) 589 590 Make an iterator that returns elements from the iterable as long as the 591 predicate is true. Roughly equivalent to:: 592 593 def takewhile(predicate, iterable): 594 # takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4 595 for x in iterable: 596 if predicate(x): 597 yield x 598 else: 599 break 600 601 602 .. function:: tee(iterable, n=2) 603 604 Return *n* independent iterators from a single iterable. 605 606 The following Python code helps explain what *tee* does (although the actual 607 implementation is more complex and uses only a single underlying 608 :abbr:`FIFO (first-in, first-out)` queue). 609 610 Roughly equivalent to:: 611 612 def tee(iterable, n=2): 613 it = iter(iterable) 614 deques = [collections.deque() for i in range(n)] 615 def gen(mydeque): 616 while True: 617 if not mydeque: # when the local deque is empty 618 try: 619 newval = next(it) # fetch a new value and 620 except StopIteration: 621 return 622 for d in deques: # load it to all the deques 623 d.append(newval) 624 yield mydeque.popleft() 625 return tuple(gen(d) for d in deques) 626 627 Once :func:`tee` has made a split, the original *iterable* should not be 628 used anywhere else; otherwise, the *iterable* could get advanced without 629 the tee objects being informed. 630 631 This itertool may require significant auxiliary storage (depending on how 632 much temporary data needs to be stored). In general, if one iterator uses 633 most or all of the data before another iterator starts, it is faster to use 634 :func:`list` instead of :func:`tee`. 635 636 637 .. function:: zip_longest(*iterables, fillvalue=None) 638 639 Make an iterator that aggregates elements from each of the iterables. If the 640 iterables are of uneven length, missing values are filled-in with *fillvalue*. 641 Iteration continues until the longest iterable is exhausted. Roughly equivalent to:: 642 643 def zip_longest(*args, fillvalue=None): 644 # zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D- 645 iterators = [iter(it) for it in args] 646 num_active = len(iterators) 647 if not num_active: 648 return 649 while True: 650 values = [] 651 for i, it in enumerate(iterators): 652 try: 653 value = next(it) 654 except StopIteration: 655 num_active -= 1 656 if not num_active: 657 return 658 iterators[i] = repeat(fillvalue) 659 value = fillvalue 660 values.append(value) 661 yield tuple(values) 662 663 If one of the iterables is potentially infinite, then the :func:`zip_longest` 664 function should be wrapped with something that limits the number of calls 665 (for example :func:`islice` or :func:`takewhile`). If not specified, 666 *fillvalue* defaults to ``None``. 667 668 669 .. _itertools-recipes: 670 671 Itertools Recipes 672 ----------------- 673 674 This section shows recipes for creating an extended toolset using the existing 675 itertools as building blocks. 676 677 The extended tools offer the same high performance as the underlying toolset. 678 The superior memory performance is kept by processing elements one at a time 679 rather than bringing the whole iterable into memory all at once. Code volume is 680 kept small by linking the tools together in a functional style which helps 681 eliminate temporary variables. High speed is retained by preferring 682 "vectorized" building blocks over the use of for-loops and :term:`generator`\s 683 which incur interpreter overhead. 684 685 .. testcode:: 686 687 def take(n, iterable): 688 "Return first n items of the iterable as a list" 689 return list(islice(iterable, n)) 690 691 def prepend(value, iterator): 692 "Prepend a single value in front of an iterator" 693 # prepend(1, [2, 3, 4]) -> 1 2 3 4 694 return chain([value], iterator) 695 696 def tabulate(function, start=0): 697 "Return function(0), function(1), ..." 698 return map(function, count(start)) 699 700 def tail(n, iterable): 701 "Return an iterator over the last n items" 702 # tail(3, 'ABCDEFG') --> E F G 703 return iter(collections.deque(iterable, maxlen=n)) 704 705 def consume(iterator, n=None): 706 "Advance the iterator n-steps ahead. If n is None, consume entirely." 707 # Use functions that consume iterators at C speed. 708 if n is None: 709 # feed the entire iterator into a zero-length deque 710 collections.deque(iterator, maxlen=0) 711 else: 712 # advance to the empty slice starting at position n 713 next(islice(iterator, n, n), None) 714 715 def nth(iterable, n, default=None): 716 "Returns the nth item or a default value" 717 return next(islice(iterable, n, None), default) 718 719 def all_equal(iterable): 720 "Returns True if all the elements are equal to each other" 721 g = groupby(iterable) 722 return next(g, True) and not next(g, False) 723 724 def quantify(iterable, pred=bool): 725 "Count how many times the predicate is true" 726 return sum(map(pred, iterable)) 727 728 def padnone(iterable): 729 """Returns the sequence elements and then returns None indefinitely. 730 731 Useful for emulating the behavior of the built-in map() function. 732 """ 733 return chain(iterable, repeat(None)) 734 735 def ncycles(iterable, n): 736 "Returns the sequence elements n times" 737 return chain.from_iterable(repeat(tuple(iterable), n)) 738 739 def dotproduct(vec1, vec2): 740 return sum(map(operator.mul, vec1, vec2)) 741 742 def flatten(listOfLists): 743 "Flatten one level of nesting" 744 return chain.from_iterable(listOfLists) 745 746 def repeatfunc(func, times=None, *args): 747 """Repeat calls to func with specified arguments. 748 749 Example: repeatfunc(random.random) 750 """ 751 if times is None: 752 return starmap(func, repeat(args)) 753 return starmap(func, repeat(args, times)) 754 755 def pairwise(iterable): 756 "s -> (s0,s1), (s1,s2), (s2, s3), ..." 757 a, b = tee(iterable) 758 next(b, None) 759 return zip(a, b) 760 761 def grouper(iterable, n, fillvalue=None): 762 "Collect data into fixed-length chunks or blocks" 763 # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx" 764 args = [iter(iterable)] * n 765 return zip_longest(*args, fillvalue=fillvalue) 766 767 def roundrobin(*iterables): 768 "roundrobin('ABC', 'D', 'EF') --> A D E B F C" 769 # Recipe credited to George Sakkis 770 num_active = len(iterables) 771 nexts = cycle(iter(it).__next__ for it in iterables) 772 while num_active: 773 try: 774 for next in nexts: 775 yield next() 776 except StopIteration: 777 # Remove the iterator we just exhausted from the cycle. 778 num_active -= 1 779 nexts = cycle(islice(nexts, num_active)) 780 781 def partition(pred, iterable): 782 'Use a predicate to partition entries into false entries and true entries' 783 # partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9 784 t1, t2 = tee(iterable) 785 return filterfalse(pred, t1), filter(pred, t2) 786 787 def powerset(iterable): 788 "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" 789 s = list(iterable) 790 return chain.from_iterable(combinations(s, r) for r in range(len(s)+1)) 791 792 def unique_everseen(iterable, key=None): 793 "List unique elements, preserving order. Remember all elements ever seen." 794 # unique_everseen('AAAABBBCCDAABBB') --> A B C D 795 # unique_everseen('ABBCcAD', str.lower) --> A B C D 796 seen = set() 797 seen_add = seen.add 798 if key is None: 799 for element in filterfalse(seen.__contains__, iterable): 800 seen_add(element) 801 yield element 802 else: 803 for element in iterable: 804 k = key(element) 805 if k not in seen: 806 seen_add(k) 807 yield element 808 809 def unique_justseen(iterable, key=None): 810 "List unique elements, preserving order. Remember only the element just seen." 811 # unique_justseen('AAAABBBCCDAABBB') --> A B C D A B 812 # unique_justseen('ABBCcAD', str.lower) --> A B C A D 813 return map(next, map(itemgetter(1), groupby(iterable, key))) 814 815 def iter_except(func, exception, first=None): 816 """ Call a function repeatedly until an exception is raised. 817 818 Converts a call-until-exception interface to an iterator interface. 819 Like builtins.iter(func, sentinel) but uses an exception instead 820 of a sentinel to end the loop. 821 822 Examples: 823 iter_except(functools.partial(heappop, h), IndexError) # priority queue iterator 824 iter_except(d.popitem, KeyError) # non-blocking dict iterator 825 iter_except(d.popleft, IndexError) # non-blocking deque iterator 826 iter_except(q.get_nowait, Queue.Empty) # loop over a producer Queue 827 iter_except(s.pop, KeyError) # non-blocking set iterator 828 829 """ 830 try: 831 if first is not None: 832 yield first() # For database APIs needing an initial cast to db.first() 833 while True: 834 yield func() 835 except exception: 836 pass 837 838 def first_true(iterable, default=False, pred=None): 839 """Returns the first true value in the iterable. 840 841 If no true value is found, returns *default* 842 843 If *pred* is not None, returns the first item 844 for which pred(item) is true. 845 846 """ 847 # first_true([a,b,c], x) --> a or b or c or x 848 # first_true([a,b], x, f) --> a if f(a) else b if f(b) else x 849 return next(filter(pred, iterable), default) 850 851 def random_product(*args, repeat=1): 852 "Random selection from itertools.product(*args, **kwds)" 853 pools = [tuple(pool) for pool in args] * repeat 854 return tuple(random.choice(pool) for pool in pools) 855 856 def random_permutation(iterable, r=None): 857 "Random selection from itertools.permutations(iterable, r)" 858 pool = tuple(iterable) 859 r = len(pool) if r is None else r 860 return tuple(random.sample(pool, r)) 861 862 def random_combination(iterable, r): 863 "Random selection from itertools.combinations(iterable, r)" 864 pool = tuple(iterable) 865 n = len(pool) 866 indices = sorted(random.sample(range(n), r)) 867 return tuple(pool[i] for i in indices) 868 869 def random_combination_with_replacement(iterable, r): 870 "Random selection from itertools.combinations_with_replacement(iterable, r)" 871 pool = tuple(iterable) 872 n = len(pool) 873 indices = sorted(random.randrange(n) for i in range(r)) 874 return tuple(pool[i] for i in indices) 875 876 def nth_combination(iterable, r, index): 877 'Equivalent to list(combinations(iterable, r))[index]' 878 pool = tuple(iterable) 879 n = len(pool) 880 if r < 0 or r > n: 881 raise ValueError 882 c = 1 883 k = min(r, n-r) 884 for i in range(1, k+1): 885 c = c * (n - k + i) // i 886 if index < 0: 887 index += c 888 if index < 0 or index >= c: 889 raise IndexError 890 result = [] 891 while r: 892 c, n, r = c*r//n, n-1, r-1 893 while index >= c: 894 index -= c 895 c, n = c*(n-r)//n, n-1 896 result.append(pool[-1-n]) 897 return tuple(result) 898 899 Note, many of the above recipes can be optimized by replacing global lookups 900 with local variables defined as default values. For example, the 901 *dotproduct* recipe can be written as:: 902 903 def dotproduct(vec1, vec2, sum=sum, map=map, mul=operator.mul): 904 return sum(map(mul, vec1, vec2)) 905