blob: c5ba2eb5960cb7c43689efd05df9d377ea6f33c9 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`itertools` --- Functions creating iterators for efficient looping
2=======================================================================
3
4.. module:: itertools
Raymond Hettinger30c73622010-12-01 23:45:20 +00005 :synopsis: Functions creating iterators for efficient looping.
Georg Brandl116aa622007-08-15 14:28:22 +00006.. moduleauthor:: Raymond Hettinger <python@rcn.com>
7.. sectionauthor:: Raymond Hettinger <python@rcn.com>
8
9
Christian Heimesfe337bf2008-03-23 21:54:12 +000010.. testsetup::
11
Raymond Hettinger30c73622010-12-01 23:45:20 +000012 from itertools import *
Christian Heimesfe337bf2008-03-23 21:54:12 +000013
14
Raymond Hettingerf76b9202009-02-17 20:00:59 +000015This module implements a number of :term:`iterator` building blocks inspired
16by constructs from APL, Haskell, and SML. Each has been recast in a form
17suitable for Python.
Georg Brandl116aa622007-08-15 14:28:22 +000018
19The module standardizes a core set of fast, memory efficient tools that are
Raymond Hettingerf76b9202009-02-17 20:00:59 +000020useful by themselves or in combination. Together, they form an "iterator
21algebra" making it possible to construct specialized tools succinctly and
22efficiently in pure Python.
Georg Brandl116aa622007-08-15 14:28:22 +000023
24For instance, SML provides a tabulation tool: ``tabulate(f)`` which produces a
Ezio Melottib6605992010-01-21 20:57:24 +000025sequence ``f(0), f(1), ...``. The same effect can be achieved in Python
Raymond Hettingera6c60372008-03-13 01:26:19 +000026by combining :func:`map` and :func:`count` to form ``map(f, count())``.
Georg Brandl116aa622007-08-15 14:28:22 +000027
Raymond Hettinger2c109ab2009-03-12 00:29:44 +000028These tools and their built-in counterparts also work well with the high-speed
29functions in the :mod:`operator` module. For example, the multiplication
30operator can be mapped across two vectors to form an efficient dot-product:
31``sum(map(operator.mul, vector1, vector2))``.
Georg Brandl116aa622007-08-15 14:28:22 +000032
Georg Brandl116aa622007-08-15 14:28:22 +000033
Raymond Hettingerf76b9202009-02-17 20:00:59 +000034**Infinite Iterators:**
Georg Brandl116aa622007-08-15 14:28:22 +000035
Raymond Hettinger5bfd8ce2009-04-10 19:02:36 +000036================== ================= ================================================= =========================================
37Iterator Arguments Results Example
38================== ================= ================================================= =========================================
39:func:`count` start, [step] start, start+step, start+2*step, ... ``count(10) --> 10 11 12 13 14 ...``
40:func:`cycle` p p0, p1, ... plast, p0, p1, ... ``cycle('ABCD') --> A B C D A B C D ...``
41:func:`repeat` elem [,n] elem, elem, elem, ... endlessly or up to n times ``repeat(10, 3) --> 10 10 10``
42================== ================= ================================================= =========================================
Georg Brandl116aa622007-08-15 14:28:22 +000043
Raymond Hettingerf76b9202009-02-17 20:00:59 +000044**Iterators terminating on the shortest input sequence:**
45
Benjamin Peterson2989f582014-01-16 10:10:13 -050046============================ ============================ ================================================= =============================================================
47Iterator Arguments Results Example
48============================ ============================ ================================================= =============================================================
49:func:`accumulate` p [,func] p0, p0+p1, p0+p1+p2, ... ``accumulate([1,2,3,4,5]) --> 1 3 6 10 15``
50:func:`chain` p, q, ... p0, p1, ... plast, q0, q1, ... ``chain('ABC', 'DEF') --> A B C D E F``
51:func:`chain.from_iterable` iterable p0, p1, ... plast, q0, q1, ... ``chain.from_iterable(['ABC', 'DEF']) --> A B C D E F``
52: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``
53: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``
54:func:`filterfalse` pred, seq elements of seq where pred(elem) is false ``filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8``
55:func:`groupby` iterable[, keyfunc] sub-iterators grouped by value of keyfunc(v)
56:func:`islice` seq, [start,] stop [, step] elements from seq[start:stop:step] ``islice('ABCDEFG', 2, None) --> C D E F G``
57:func:`starmap` func, seq func(\*seq[0]), func(\*seq[1]), ... ``starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000``
58:func:`takewhile` pred, seq seq[0], seq[1], until pred fails ``takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4``
59:func:`tee` it, n it1, it2, ... itn splits one iterator into n
60:func:`zip_longest` p, q, ... (p[0], q[0]), (p[1], q[1]), ... ``zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-``
61============================ ============================ ================================================= =============================================================
Raymond Hettingerf76b9202009-02-17 20:00:59 +000062
63**Combinatoric generators:**
64
Raymond Hettinger7f587cd2009-04-10 19:43:50 +000065============================================== ==================== =============================================================
66Iterator Arguments Results
67============================================== ==================== =============================================================
68:func:`product` p, q, ... [repeat=1] cartesian product, equivalent to a nested for-loop
69:func:`permutations` p[, r] r-length tuples, all possible orderings, no repeated elements
Raymond Hettinger36c3c022009-11-19 01:20:07 +000070:func:`combinations` p, r r-length tuples, in sorted order, no repeated elements
71:func:`combinations_with_replacement` p, r r-length tuples, in sorted order, with repeated elements
Raymond Hettinger7f587cd2009-04-10 19:43:50 +000072``product('ABCD', repeat=2)`` ``AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD``
73``permutations('ABCD', 2)`` ``AB AC AD BA BC BD CA CB CD DA DB DC``
74``combinations('ABCD', 2)`` ``AB AC AD BC BD CD``
75``combinations_with_replacement('ABCD', 2)`` ``AA AB AC AD BB BC BD CC CD DD``
76============================================== ==================== =============================================================
Georg Brandl116aa622007-08-15 14:28:22 +000077
78
79.. _itertools-functions:
80
81Itertool functions
82------------------
83
84The following module functions all construct and return iterators. Some provide
85streams of infinite length, so they should only be accessed by functions or
86loops that truncate the stream.
87
Raymond Hettinger5d446132011-03-27 18:52:10 -070088.. function:: accumulate(iterable[, func])
Raymond Hettingeradb81462010-12-01 22:50:36 +000089
Andrew Kuchling15b04eb2014-04-15 22:28:40 -040090 Make an iterator that returns accumulated sums, or accumulated
91 results of other binary functions (specified via the optional
92 *func* argument). If *func* is supplied, it should be a function
93 of two arguments. Elements of the input *iterable* may be any type
94 that can be accepted as arguments to *func*. (For example, with
95 the default operation of addition, elements may be any addable
96 type including :class:`~decimal.Decimal` or
97 :class:`~fractions.Fraction`.) If the input iterable is empty, the
98 output iterable will also be empty.
Raymond Hettingeradb81462010-12-01 22:50:36 +000099
Raymond Hettinger5d446132011-03-27 18:52:10 -0700100 Equivalent to::
101
102 def accumulate(iterable, func=operator.add):
Raymond Hettingeradb81462010-12-01 22:50:36 +0000103 'Return running totals'
Raymond Hettingerd8ff4652010-12-03 02:09:34 +0000104 # accumulate([1,2,3,4,5]) --> 1 3 6 10 15
Raymond Hettinger5d446132011-03-27 18:52:10 -0700105 # accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
Raymond Hettingerd8ff4652010-12-03 02:09:34 +0000106 it = iter(iterable)
107 total = next(it)
108 yield total
109 for element in it:
Raymond Hettinger5d446132011-03-27 18:52:10 -0700110 total = func(total, element)
Raymond Hettingerd8ff4652010-12-03 02:09:34 +0000111 yield total
Raymond Hettingeradb81462010-12-01 22:50:36 +0000112
Raymond Hettinger295c1d42011-04-21 11:09:28 -0700113 There are a number of uses for the *func* argument. It can be set to
114 :func:`min` for a running minimum, :func:`max` for a running maximum, or
115 :func:`operator.mul` for a running product. Amortization tables can be
116 built by accumulating interest and applying payments. First-order
117 `recurrence relations <http://en.wikipedia.org/wiki/Recurrence_relation>`_
118 can be modeled by supplying the initial value in the iterable and using only
119 the accumulated total in *func* argument::
Raymond Hettinger5d446132011-03-27 18:52:10 -0700120
121 >>> data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
122 >>> list(accumulate(data, operator.mul)) # running product
123 [3, 12, 72, 144, 144, 1296, 0, 0, 0, 0]
124 >>> list(accumulate(data, max)) # running maximum
125 [3, 4, 6, 6, 6, 9, 9, 9, 9, 9]
126
127 # Amortize a 5% loan of 1000 with 4 annual payments of 90
128 >>> cashflows = [1000, -90, -90, -90, -90]
129 >>> list(accumulate(cashflows, lambda bal, pmt: bal*1.05 + pmt))
130 [1000, 960.0, 918.0, 873.9000000000001, 827.5950000000001]
131
Raymond Hettinger295c1d42011-04-21 11:09:28 -0700132 # Chaotic recurrence relation http://en.wikipedia.org/wiki/Logistic_map
133 >>> logistic_map = lambda x, _: r * x * (1 - x)
134 >>> r = 3.8
135 >>> x0 = 0.4
136 >>> inputs = repeat(x0, 36) # only the initial value is used
137 >>> [format(x, '.2f') for x in accumulate(inputs, logistic_map)]
138 ['0.40', '0.91', '0.30', '0.81', '0.60', '0.92', '0.29', '0.79', '0.63',
Serhiy Storchakaa4d170d2013-12-23 18:20:51 +0200139 '0.88', '0.39', '0.90', '0.33', '0.84', '0.52', '0.95', '0.18', '0.57',
Raymond Hettinger295c1d42011-04-21 11:09:28 -0700140 '0.93', '0.25', '0.71', '0.79', '0.63', '0.88', '0.39', '0.91', '0.32',
141 '0.83', '0.54', '0.95', '0.20', '0.60', '0.91', '0.30', '0.80', '0.60']
142
Raymond Hettinger64801682013-10-12 16:04:17 -0700143 See :func:`functools.reduce` for a similar function that returns only the
144 final accumulated value.
145
Raymond Hettingeradb81462010-12-01 22:50:36 +0000146 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000147
Raymond Hettinger5d446132011-03-27 18:52:10 -0700148 .. versionchanged:: 3.3
149 Added the optional *func* parameter.
150
Georg Brandl116aa622007-08-15 14:28:22 +0000151.. function:: chain(*iterables)
152
Raymond Hettinger30c73622010-12-01 23:45:20 +0000153 Make an iterator that returns elements from the first iterable until it is
154 exhausted, then proceeds to the next iterable, until all of the iterables are
155 exhausted. Used for treating consecutive sequences as a single sequence.
156 Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000157
Raymond Hettinger30c73622010-12-01 23:45:20 +0000158 def chain(*iterables):
159 # chain('ABC', 'DEF') --> A B C D E F
160 for it in iterables:
161 for element in it:
162 yield element
Georg Brandl116aa622007-08-15 14:28:22 +0000163
164
Georg Brandl933b9742010-07-29 14:36:11 +0000165.. classmethod:: chain.from_iterable(iterable)
Christian Heimes70e7ea22008-02-28 20:02:27 +0000166
Raymond Hettinger30c73622010-12-01 23:45:20 +0000167 Alternate constructor for :func:`chain`. Gets chained inputs from a
Raymond Hettinger1e21ebc2013-09-09 01:54:27 -0500168 single iterable argument that is evaluated lazily. Roughly equivalent to::
Christian Heimes70e7ea22008-02-28 20:02:27 +0000169
Raymond Hettinger30c73622010-12-01 23:45:20 +0000170 def from_iterable(iterables):
171 # chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
172 for it in iterables:
173 for element in it:
174 yield element
Christian Heimes70e7ea22008-02-28 20:02:27 +0000175
Christian Heimes78644762008-03-04 23:39:23 +0000176
Christian Heimes836baa52008-02-26 08:18:30 +0000177.. function:: combinations(iterable, r)
178
Raymond Hettinger30c73622010-12-01 23:45:20 +0000179 Return *r* length subsequences of elements from the input *iterable*.
Christian Heimes836baa52008-02-26 08:18:30 +0000180
Raymond Hettinger30c73622010-12-01 23:45:20 +0000181 Combinations are emitted in lexicographic sort order. So, if the
182 input *iterable* is sorted, the combination tuples will be produced
183 in sorted order.
Christian Heimes836baa52008-02-26 08:18:30 +0000184
Raymond Hettinger30c73622010-12-01 23:45:20 +0000185 Elements are treated as unique based on their position, not on their
186 value. So if the input elements are unique, there will be no repeat
187 values in each combination.
Christian Heimes836baa52008-02-26 08:18:30 +0000188
Raymond Hettinger30c73622010-12-01 23:45:20 +0000189 Equivalent to::
Christian Heimes836baa52008-02-26 08:18:30 +0000190
191 def combinations(iterable, r):
Raymond Hettingerdd1150e2008-03-13 02:39:40 +0000192 # combinations('ABCD', 2) --> AB AC AD BC BD CD
193 # combinations(range(4), 3) --> 012 013 023 123
Christian Heimes836baa52008-02-26 08:18:30 +0000194 pool = tuple(iterable)
Christian Heimes380f7f22008-02-28 11:19:05 +0000195 n = len(pool)
Raymond Hettinger5bad41e2009-01-08 21:01:54 +0000196 if r > n:
197 return
198 indices = list(range(r))
Christian Heimesb558a2e2008-03-02 22:46:37 +0000199 yield tuple(pool[i] for i in indices)
Raymond Hettingercf984ce2009-02-18 20:56:51 +0000200 while True:
Christian Heimes380f7f22008-02-28 11:19:05 +0000201 for i in reversed(range(r)):
Christian Heimesb558a2e2008-03-02 22:46:37 +0000202 if indices[i] != i + n - r:
Christian Heimes836baa52008-02-26 08:18:30 +0000203 break
Christian Heimes380f7f22008-02-28 11:19:05 +0000204 else:
205 return
Christian Heimesb558a2e2008-03-02 22:46:37 +0000206 indices[i] += 1
Christian Heimes380f7f22008-02-28 11:19:05 +0000207 for j in range(i+1, r):
Christian Heimesb558a2e2008-03-02 22:46:37 +0000208 indices[j] = indices[j-1] + 1
209 yield tuple(pool[i] for i in indices)
Christian Heimes836baa52008-02-26 08:18:30 +0000210
Raymond Hettinger30c73622010-12-01 23:45:20 +0000211 The code for :func:`combinations` can be also expressed as a subsequence
212 of :func:`permutations` after filtering entries where the elements are not
213 in sorted order (according to their position in the input pool)::
Christian Heimes78644762008-03-04 23:39:23 +0000214
215 def combinations(iterable, r):
216 pool = tuple(iterable)
217 n = len(pool)
218 for indices in permutations(range(n), r):
219 if sorted(indices) == list(indices):
220 yield tuple(pool[i] for i in indices)
221
Raymond Hettinger30c73622010-12-01 23:45:20 +0000222 The number of items returned is ``n! / r! / (n-r)!`` when ``0 <= r <= n``
223 or zero when ``r > n``.
Christian Heimes836baa52008-02-26 08:18:30 +0000224
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000225.. function:: combinations_with_replacement(iterable, r)
226
Raymond Hettinger30c73622010-12-01 23:45:20 +0000227 Return *r* length subsequences of elements from the input *iterable*
228 allowing individual elements to be repeated more than once.
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000229
Raymond Hettinger30c73622010-12-01 23:45:20 +0000230 Combinations are emitted in lexicographic sort order. So, if the
231 input *iterable* is sorted, the combination tuples will be produced
232 in sorted order.
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000233
Raymond Hettinger30c73622010-12-01 23:45:20 +0000234 Elements are treated as unique based on their position, not on their
235 value. So if the input elements are unique, the generated combinations
236 will also be unique.
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000237
Raymond Hettinger30c73622010-12-01 23:45:20 +0000238 Equivalent to::
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000239
240 def combinations_with_replacement(iterable, r):
241 # combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC
242 pool = tuple(iterable)
243 n = len(pool)
244 if not n and r:
245 return
246 indices = [0] * r
247 yield tuple(pool[i] for i in indices)
Raymond Hettingercf984ce2009-02-18 20:56:51 +0000248 while True:
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000249 for i in reversed(range(r)):
250 if indices[i] != n - 1:
251 break
252 else:
253 return
254 indices[i:] = [indices[i] + 1] * (r - i)
255 yield tuple(pool[i] for i in indices)
256
Raymond Hettinger30c73622010-12-01 23:45:20 +0000257 The code for :func:`combinations_with_replacement` can be also expressed as
258 a subsequence of :func:`product` after filtering entries where the elements
259 are not in sorted order (according to their position in the input pool)::
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000260
261 def combinations_with_replacement(iterable, r):
262 pool = tuple(iterable)
263 n = len(pool)
264 for indices in product(range(n), repeat=r):
265 if sorted(indices) == list(indices):
266 yield tuple(pool[i] for i in indices)
267
Raymond Hettinger30c73622010-12-01 23:45:20 +0000268 The number of items returned is ``(n+r-1)! / r! / (n-1)!`` when ``n > 0``.
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000269
Raymond Hettinger30c73622010-12-01 23:45:20 +0000270 .. versionadded:: 3.1
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000271
Georg Brandl67b21b72010-08-17 15:07:14 +0000272
Raymond Hettinger6b3b0fc2009-01-26 02:56:58 +0000273.. function:: compress(data, selectors)
274
Raymond Hettinger30c73622010-12-01 23:45:20 +0000275 Make an iterator that filters elements from *data* returning only those that
276 have a corresponding element in *selectors* that evaluates to ``True``.
277 Stops when either the *data* or *selectors* iterables has been exhausted.
278 Equivalent to::
Raymond Hettinger6b3b0fc2009-01-26 02:56:58 +0000279
Raymond Hettinger30c73622010-12-01 23:45:20 +0000280 def compress(data, selectors):
281 # compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F
282 return (d for d, s in zip(data, selectors) if s)
Raymond Hettinger6b3b0fc2009-01-26 02:56:58 +0000283
Raymond Hettinger30c73622010-12-01 23:45:20 +0000284 .. versionadded:: 3.1
Raymond Hettinger6b3b0fc2009-01-26 02:56:58 +0000285
286
Raymond Hettinger9e8dbbc2009-02-14 04:21:49 +0000287.. function:: count(start=0, step=1)
Georg Brandl116aa622007-08-15 14:28:22 +0000288
Andrew Kuchlingedb42602013-06-21 08:00:58 -0400289 Make an iterator that returns evenly spaced values starting with number *start*. Often
Raymond Hettinger30c73622010-12-01 23:45:20 +0000290 used as an argument to :func:`map` to generate consecutive data points.
291 Also, used with :func:`zip` to add sequence numbers. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000292
Raymond Hettinger30c73622010-12-01 23:45:20 +0000293 def count(start=0, step=1):
294 # count(10) --> 10 11 12 13 14 ...
Georg Brandl37a80dc2011-01-13 07:31:18 +0000295 # count(2.5, 0.5) -> 2.5 3.0 3.5 ...
Raymond Hettinger30c73622010-12-01 23:45:20 +0000296 n = start
297 while True:
298 yield n
299 n += step
Georg Brandl116aa622007-08-15 14:28:22 +0000300
Raymond Hettinger30c73622010-12-01 23:45:20 +0000301 When counting with floating point numbers, better accuracy can sometimes be
302 achieved by substituting multiplicative code such as: ``(start + step * i
303 for i in count())``.
Raymond Hettinger5bc472a2009-06-17 01:40:52 +0000304
Raymond Hettinger30c73622010-12-01 23:45:20 +0000305 .. versionchanged:: 3.1
306 Added *step* argument and allowed non-integer arguments.
Georg Brandl116aa622007-08-15 14:28:22 +0000307
308.. function:: cycle(iterable)
309
Raymond Hettinger30c73622010-12-01 23:45:20 +0000310 Make an iterator returning elements from the iterable and saving a copy of each.
311 When the iterable is exhausted, return elements from the saved copy. Repeats
312 indefinitely. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000313
Raymond Hettinger30c73622010-12-01 23:45:20 +0000314 def cycle(iterable):
315 # cycle('ABCD') --> A B C D A B C D A B C D ...
316 saved = []
317 for element in iterable:
318 yield element
319 saved.append(element)
320 while saved:
321 for element in saved:
Georg Brandl116aa622007-08-15 14:28:22 +0000322 yield element
323
Raymond Hettinger30c73622010-12-01 23:45:20 +0000324 Note, this member of the toolkit may require significant auxiliary storage
325 (depending on the length of the iterable).
Georg Brandl116aa622007-08-15 14:28:22 +0000326
327
328.. function:: dropwhile(predicate, iterable)
329
Raymond Hettinger30c73622010-12-01 23:45:20 +0000330 Make an iterator that drops elements from the iterable as long as the predicate
331 is true; afterwards, returns every element. Note, the iterator does not produce
332 *any* output until the predicate first becomes false, so it may have a lengthy
333 start-up time. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000334
Raymond Hettinger30c73622010-12-01 23:45:20 +0000335 def dropwhile(predicate, iterable):
336 # dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
337 iterable = iter(iterable)
338 for x in iterable:
339 if not predicate(x):
340 yield x
341 break
342 for x in iterable:
343 yield x
Georg Brandl116aa622007-08-15 14:28:22 +0000344
Raymond Hettinger749761e2009-01-27 04:42:48 +0000345.. function:: filterfalse(predicate, iterable)
346
Raymond Hettinger30c73622010-12-01 23:45:20 +0000347 Make an iterator that filters elements from iterable returning only those for
348 which the predicate is ``False``. If *predicate* is ``None``, return the items
349 that are false. Equivalent to::
Raymond Hettinger749761e2009-01-27 04:42:48 +0000350
Raymond Hettinger30c73622010-12-01 23:45:20 +0000351 def filterfalse(predicate, iterable):
352 # filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8
353 if predicate is None:
354 predicate = bool
355 for x in iterable:
356 if not predicate(x):
357 yield x
Raymond Hettinger749761e2009-01-27 04:42:48 +0000358
Georg Brandl116aa622007-08-15 14:28:22 +0000359
Georg Brandl3dd33882009-06-01 17:35:27 +0000360.. function:: groupby(iterable, key=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000361
Raymond Hettinger30c73622010-12-01 23:45:20 +0000362 Make an iterator that returns consecutive keys and groups from the *iterable*.
363 The *key* is a function computing a key value for each element. If not
364 specified or is ``None``, *key* defaults to an identity function and returns
365 the element unchanged. Generally, the iterable needs to already be sorted on
366 the same key function.
Georg Brandl116aa622007-08-15 14:28:22 +0000367
Raymond Hettinger30c73622010-12-01 23:45:20 +0000368 The operation of :func:`groupby` is similar to the ``uniq`` filter in Unix. It
369 generates a break or new group every time the value of the key function changes
370 (which is why it is usually necessary to have sorted the data using the same key
371 function). That behavior differs from SQL's GROUP BY which aggregates common
372 elements regardless of their input order.
Georg Brandl116aa622007-08-15 14:28:22 +0000373
Raymond Hettinger30c73622010-12-01 23:45:20 +0000374 The returned group is itself an iterator that shares the underlying iterable
375 with :func:`groupby`. Because the source is shared, when the :func:`groupby`
376 object is advanced, the previous group is no longer visible. So, if that data
377 is needed later, it should be stored as a list::
Georg Brandl116aa622007-08-15 14:28:22 +0000378
Raymond Hettinger30c73622010-12-01 23:45:20 +0000379 groups = []
380 uniquekeys = []
381 data = sorted(data, key=keyfunc)
382 for k, g in groupby(data, keyfunc):
383 groups.append(list(g)) # Store group iterator as a list
384 uniquekeys.append(k)
Georg Brandl116aa622007-08-15 14:28:22 +0000385
Raymond Hettinger30c73622010-12-01 23:45:20 +0000386 :func:`groupby` is equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000387
Raymond Hettinger30c73622010-12-01 23:45:20 +0000388 class groupby:
389 # [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
390 # [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D
391 def __init__(self, iterable, key=None):
392 if key is None:
393 key = lambda x: x
394 self.keyfunc = key
395 self.it = iter(iterable)
396 self.tgtkey = self.currkey = self.currvalue = object()
397 def __iter__(self):
398 return self
399 def __next__(self):
400 while self.currkey == self.tgtkey:
401 self.currvalue = next(self.it) # Exit on StopIteration
402 self.currkey = self.keyfunc(self.currvalue)
403 self.tgtkey = self.currkey
404 return (self.currkey, self._grouper(self.tgtkey))
405 def _grouper(self, tgtkey):
406 while self.currkey == tgtkey:
407 yield self.currvalue
408 self.currvalue = next(self.it) # Exit on StopIteration
409 self.currkey = self.keyfunc(self.currvalue)
Georg Brandl116aa622007-08-15 14:28:22 +0000410
Georg Brandl116aa622007-08-15 14:28:22 +0000411
Ezio Melottie0add762012-09-14 06:32:35 +0300412.. function:: islice(iterable, stop)
413 islice(iterable, start, stop[, step])
Georg Brandl116aa622007-08-15 14:28:22 +0000414
Raymond Hettinger30c73622010-12-01 23:45:20 +0000415 Make an iterator that returns selected elements from the iterable. If *start* is
416 non-zero, then elements from the iterable are skipped until start is reached.
417 Afterward, elements are returned consecutively unless *step* is set higher than
418 one which results in items being skipped. If *stop* is ``None``, then iteration
419 continues until the iterator is exhausted, if at all; otherwise, it stops at the
420 specified position. Unlike regular slicing, :func:`islice` does not support
421 negative values for *start*, *stop*, or *step*. Can be used to extract related
422 fields from data where the internal structure has been flattened (for example, a
423 multi-line report may list a name field on every third line). Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000424
Raymond Hettinger30c73622010-12-01 23:45:20 +0000425 def islice(iterable, *args):
426 # islice('ABCDEFG', 2) --> A B
427 # islice('ABCDEFG', 2, 4) --> C D
428 # islice('ABCDEFG', 2, None) --> C D E F G
429 # islice('ABCDEFG', 0, None, 2) --> A C E G
430 s = slice(*args)
431 it = iter(range(s.start or 0, s.stop or sys.maxsize, s.step or 1))
432 nexti = next(it)
433 for i, element in enumerate(iterable):
434 if i == nexti:
435 yield element
436 nexti = next(it)
Georg Brandl116aa622007-08-15 14:28:22 +0000437
Raymond Hettinger30c73622010-12-01 23:45:20 +0000438 If *start* is ``None``, then iteration starts at zero. If *step* is ``None``,
439 then the step defaults to one.
Georg Brandl116aa622007-08-15 14:28:22 +0000440
Georg Brandl116aa622007-08-15 14:28:22 +0000441
Georg Brandl3dd33882009-06-01 17:35:27 +0000442.. function:: permutations(iterable, r=None)
Christian Heimes70e7ea22008-02-28 20:02:27 +0000443
Raymond Hettinger30c73622010-12-01 23:45:20 +0000444 Return successive *r* length permutations of elements in the *iterable*.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000445
Raymond Hettinger30c73622010-12-01 23:45:20 +0000446 If *r* is not specified or is ``None``, then *r* defaults to the length
447 of the *iterable* and all possible full-length permutations
448 are generated.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000449
Raymond Hettinger30c73622010-12-01 23:45:20 +0000450 Permutations are emitted in lexicographic sort order. So, if the
451 input *iterable* is sorted, the permutation tuples will be produced
452 in sorted order.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000453
Raymond Hettinger30c73622010-12-01 23:45:20 +0000454 Elements are treated as unique based on their position, not on their
455 value. So if the input elements are unique, there will be no repeat
456 values in each permutation.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000457
Raymond Hettinger30c73622010-12-01 23:45:20 +0000458 Equivalent to::
Christian Heimesb558a2e2008-03-02 22:46:37 +0000459
460 def permutations(iterable, r=None):
Raymond Hettingerdd1150e2008-03-13 02:39:40 +0000461 # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
462 # permutations(range(3)) --> 012 021 102 120 201 210
Christian Heimesb558a2e2008-03-02 22:46:37 +0000463 pool = tuple(iterable)
464 n = len(pool)
465 r = n if r is None else r
Raymond Hettinger5bad41e2009-01-08 21:01:54 +0000466 if r > n:
467 return
468 indices = list(range(n))
Sandro Tosi73866622011-12-25 17:25:45 +0100469 cycles = list(range(n, n-r, -1))
Christian Heimesb558a2e2008-03-02 22:46:37 +0000470 yield tuple(pool[i] for i in indices[:r])
471 while n:
472 for i in reversed(range(r)):
473 cycles[i] -= 1
474 if cycles[i] == 0:
475 indices[i:] = indices[i+1:] + indices[i:i+1]
476 cycles[i] = n - i
477 else:
478 j = cycles[i]
479 indices[i], indices[-j] = indices[-j], indices[i]
480 yield tuple(pool[i] for i in indices[:r])
481 break
482 else:
483 return
Christian Heimes70e7ea22008-02-28 20:02:27 +0000484
Raymond Hettinger30c73622010-12-01 23:45:20 +0000485 The code for :func:`permutations` can be also expressed as a subsequence of
486 :func:`product`, filtered to exclude entries with repeated elements (those
487 from the same position in the input pool)::
Christian Heimes78644762008-03-04 23:39:23 +0000488
489 def permutations(iterable, r=None):
490 pool = tuple(iterable)
491 n = len(pool)
492 r = n if r is None else r
493 for indices in product(range(n), repeat=r):
494 if len(set(indices)) == r:
495 yield tuple(pool[i] for i in indices)
496
Raymond Hettinger30c73622010-12-01 23:45:20 +0000497 The number of items returned is ``n! / (n-r)!`` when ``0 <= r <= n``
498 or zero when ``r > n``.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000499
Georg Brandl3dd33882009-06-01 17:35:27 +0000500.. function:: product(*iterables, repeat=1)
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000501
Raymond Hettinger30c73622010-12-01 23:45:20 +0000502 Cartesian product of input iterables.
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000503
Raymond Hettinger30c73622010-12-01 23:45:20 +0000504 Equivalent to nested for-loops in a generator expression. For example,
505 ``product(A, B)`` returns the same as ``((x,y) for x in A for y in B)``.
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000506
Raymond Hettinger30c73622010-12-01 23:45:20 +0000507 The nested loops cycle like an odometer with the rightmost element advancing
508 on every iteration. This pattern creates a lexicographic ordering so that if
509 the input's iterables are sorted, the product tuples are emitted in sorted
510 order.
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000511
Raymond Hettinger30c73622010-12-01 23:45:20 +0000512 To compute the product of an iterable with itself, specify the number of
513 repetitions with the optional *repeat* keyword argument. For example,
514 ``product(A, repeat=4)`` means the same as ``product(A, A, A, A)``.
Christian Heimes9e7f1d22008-02-28 12:27:11 +0000515
Raymond Hettinger30c73622010-12-01 23:45:20 +0000516 This function is equivalent to the following code, except that the
517 actual implementation does not build up intermediate results in memory::
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000518
Raymond Hettinger30c73622010-12-01 23:45:20 +0000519 def product(*args, repeat=1):
520 # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
521 # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
522 pools = [tuple(pool) for pool in args] * repeat
523 result = [[]]
524 for pool in pools:
525 result = [x+[y] for x in result for y in pool]
526 for prod in result:
527 yield tuple(prod)
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000528
529
Raymond Hettingerd75ad442009-06-01 19:16:52 +0000530.. function:: repeat(object[, times])
Georg Brandl116aa622007-08-15 14:28:22 +0000531
Raymond Hettinger30c73622010-12-01 23:45:20 +0000532 Make an iterator that returns *object* over and over again. Runs indefinitely
533 unless the *times* argument is specified. Used as argument to :func:`map` for
534 invariant parameters to the called function. Also used with :func:`zip` to
535 create an invariant part of a tuple record. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000536
Raymond Hettinger30c73622010-12-01 23:45:20 +0000537 def repeat(object, times=None):
538 # repeat(10, 3) --> 10 10 10
539 if times is None:
540 while True:
541 yield object
542 else:
543 for i in range(times):
544 yield object
Georg Brandl116aa622007-08-15 14:28:22 +0000545
Raymond Hettingerfc3ba6b2012-02-01 09:07:40 -0800546 A common use for *repeat* is to supply a stream of constant values to *map*
547 or *zip*::
548
549 >>> list(map(pow, range(10), repeat(2)))
550 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Georg Brandl116aa622007-08-15 14:28:22 +0000551
552.. function:: starmap(function, iterable)
553
Raymond Hettinger30c73622010-12-01 23:45:20 +0000554 Make an iterator that computes the function using arguments obtained from
555 the iterable. Used instead of :func:`map` when argument parameters are already
556 grouped in tuples from a single iterable (the data has been "pre-zipped"). The
557 difference between :func:`map` and :func:`starmap` parallels the distinction
558 between ``function(a,b)`` and ``function(*c)``. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000559
Raymond Hettinger30c73622010-12-01 23:45:20 +0000560 def starmap(function, iterable):
561 # starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000
562 for args in iterable:
563 yield function(*args)
Christian Heimes679db4a2008-01-18 09:56:22 +0000564
Georg Brandl116aa622007-08-15 14:28:22 +0000565
566.. function:: takewhile(predicate, iterable)
567
Raymond Hettinger30c73622010-12-01 23:45:20 +0000568 Make an iterator that returns elements from the iterable as long as the
569 predicate is true. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000570
Raymond Hettinger30c73622010-12-01 23:45:20 +0000571 def takewhile(predicate, iterable):
572 # takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4
573 for x in iterable:
574 if predicate(x):
575 yield x
576 else:
577 break
Georg Brandl116aa622007-08-15 14:28:22 +0000578
579
Georg Brandl3dd33882009-06-01 17:35:27 +0000580.. function:: tee(iterable, n=2)
Georg Brandl116aa622007-08-15 14:28:22 +0000581
Raymond Hettinger30c73622010-12-01 23:45:20 +0000582 Return *n* independent iterators from a single iterable. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000583
Raymond Hettingercf984ce2009-02-18 20:56:51 +0000584 def tee(iterable, n=2):
585 it = iter(iterable)
586 deques = [collections.deque() for i in range(n)]
587 def gen(mydeque):
588 while True:
589 if not mydeque: # when the local deque is empty
590 newval = next(it) # fetch a new value and
591 for d in deques: # load it to all the deques
592 d.append(newval)
593 yield mydeque.popleft()
594 return tuple(gen(d) for d in deques)
Georg Brandl116aa622007-08-15 14:28:22 +0000595
Raymond Hettinger30c73622010-12-01 23:45:20 +0000596 Once :func:`tee` has made a split, the original *iterable* should not be
597 used anywhere else; otherwise, the *iterable* could get advanced without
598 the tee objects being informed.
Georg Brandl116aa622007-08-15 14:28:22 +0000599
Raymond Hettinger30c73622010-12-01 23:45:20 +0000600 This itertool may require significant auxiliary storage (depending on how
601 much temporary data needs to be stored). In general, if one iterator uses
602 most or all of the data before another iterator starts, it is faster to use
603 :func:`list` instead of :func:`tee`.
Georg Brandl116aa622007-08-15 14:28:22 +0000604
Georg Brandl116aa622007-08-15 14:28:22 +0000605
Georg Brandl3dd33882009-06-01 17:35:27 +0000606.. function:: zip_longest(*iterables, fillvalue=None)
Raymond Hettinger749761e2009-01-27 04:42:48 +0000607
Raymond Hettinger30c73622010-12-01 23:45:20 +0000608 Make an iterator that aggregates elements from each of the iterables. If the
609 iterables are of uneven length, missing values are filled-in with *fillvalue*.
610 Iteration continues until the longest iterable is exhausted. Equivalent to::
Raymond Hettinger749761e2009-01-27 04:42:48 +0000611
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700612 class ZipExhausted(Exception):
613 pass
614
615 def zip_longest(*args, **kwds):
Raymond Hettinger30c73622010-12-01 23:45:20 +0000616 # zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700617 fillvalue = kwds.get('fillvalue')
618 counter = len(args) - 1
619 def sentinel():
620 nonlocal counter
621 if not counter:
622 raise ZipExhausted
623 counter -= 1
624 yield fillvalue
Raymond Hettinger30c73622010-12-01 23:45:20 +0000625 fillers = repeat(fillvalue)
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700626 iterators = [chain(it, sentinel(), fillers) for it in args]
Raymond Hettinger30c73622010-12-01 23:45:20 +0000627 try:
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700628 while iterators:
629 yield tuple(map(next, iterators))
630 except ZipExhausted:
Raymond Hettinger30c73622010-12-01 23:45:20 +0000631 pass
Raymond Hettinger749761e2009-01-27 04:42:48 +0000632
Raymond Hettinger30c73622010-12-01 23:45:20 +0000633 If one of the iterables is potentially infinite, then the :func:`zip_longest`
634 function should be wrapped with something that limits the number of calls
635 (for example :func:`islice` or :func:`takewhile`). If not specified,
636 *fillvalue* defaults to ``None``.
Raymond Hettinger749761e2009-01-27 04:42:48 +0000637
638
Georg Brandl116aa622007-08-15 14:28:22 +0000639.. _itertools-recipes:
640
Raymond Hettinger1fa76822010-12-06 23:31:36 +0000641Itertools Recipes
642-----------------
Georg Brandl116aa622007-08-15 14:28:22 +0000643
644This section shows recipes for creating an extended toolset using the existing
645itertools as building blocks.
646
647The extended tools offer the same high performance as the underlying toolset.
648The superior memory performance is kept by processing elements one at a time
649rather than bringing the whole iterable into memory all at once. Code volume is
650kept small by linking the tools together in a functional style which helps
651eliminate temporary variables. High speed is retained by preferring
Georg Brandl9afde1c2007-11-01 20:32:30 +0000652"vectorized" building blocks over the use of for-loops and :term:`generator`\s
Christian Heimesfe337bf2008-03-23 21:54:12 +0000653which incur interpreter overhead.
654
655.. testcode::
Georg Brandl116aa622007-08-15 14:28:22 +0000656
Raymond Hettinger30c73622010-12-01 23:45:20 +0000657 def take(n, iterable):
658 "Return first n items of the iterable as a list"
659 return list(islice(iterable, n))
Georg Brandl116aa622007-08-15 14:28:22 +0000660
Raymond Hettinger30c73622010-12-01 23:45:20 +0000661 def tabulate(function, start=0):
662 "Return function(0), function(1), ..."
663 return map(function, count(start))
Raymond Hettingerdd1150e2008-03-13 02:39:40 +0000664
Raymond Hettingerdfe098d2014-05-25 22:03:56 -0700665 def tail(n, iterable):
666 "Return an iterator over the last n items"
667 # tail(3, 'ABCDEFG') --> E F G
668 return iter(collections.deque(iterable, maxlen=n))
669
Raymond Hettinger30c73622010-12-01 23:45:20 +0000670 def consume(iterator, n):
671 "Advance the iterator n-steps ahead. If n is none, consume entirely."
672 # Use functions that consume iterators at C speed.
673 if n is None:
674 # feed the entire iterator into a zero-length deque
675 collections.deque(iterator, maxlen=0)
676 else:
677 # advance to the empty slice starting at position n
678 next(islice(iterator, n, n), None)
Raymond Hettingerfa007962009-03-09 11:55:25 +0000679
Raymond Hettinger30c73622010-12-01 23:45:20 +0000680 def nth(iterable, n, default=None):
681 "Returns the nth item or a default value"
682 return next(islice(iterable, n, None), default)
Georg Brandl116aa622007-08-15 14:28:22 +0000683
Raymond Hettinger30c73622010-12-01 23:45:20 +0000684 def quantify(iterable, pred=bool):
685 "Count how many times the predicate is true"
686 return sum(map(pred, iterable))
Georg Brandl116aa622007-08-15 14:28:22 +0000687
Raymond Hettinger30c73622010-12-01 23:45:20 +0000688 def padnone(iterable):
689 """Returns the sequence elements and then returns None indefinitely.
Georg Brandl116aa622007-08-15 14:28:22 +0000690
Raymond Hettinger30c73622010-12-01 23:45:20 +0000691 Useful for emulating the behavior of the built-in map() function.
692 """
693 return chain(iterable, repeat(None))
Georg Brandl116aa622007-08-15 14:28:22 +0000694
Raymond Hettinger30c73622010-12-01 23:45:20 +0000695 def ncycles(iterable, n):
696 "Returns the sequence elements n times"
697 return chain.from_iterable(repeat(tuple(iterable), n))
Georg Brandl116aa622007-08-15 14:28:22 +0000698
Raymond Hettinger30c73622010-12-01 23:45:20 +0000699 def dotproduct(vec1, vec2):
700 return sum(map(operator.mul, vec1, vec2))
Georg Brandl116aa622007-08-15 14:28:22 +0000701
Raymond Hettinger30c73622010-12-01 23:45:20 +0000702 def flatten(listOfLists):
703 "Flatten one level of nesting"
704 return chain.from_iterable(listOfLists)
Georg Brandl116aa622007-08-15 14:28:22 +0000705
Raymond Hettinger30c73622010-12-01 23:45:20 +0000706 def repeatfunc(func, times=None, *args):
707 """Repeat calls to func with specified arguments.
Georg Brandl116aa622007-08-15 14:28:22 +0000708
Raymond Hettinger30c73622010-12-01 23:45:20 +0000709 Example: repeatfunc(random.random)
710 """
711 if times is None:
712 return starmap(func, repeat(args))
713 return starmap(func, repeat(args, times))
Georg Brandl116aa622007-08-15 14:28:22 +0000714
Raymond Hettinger30c73622010-12-01 23:45:20 +0000715 def pairwise(iterable):
716 "s -> (s0,s1), (s1,s2), (s2, s3), ..."
717 a, b = tee(iterable)
718 next(b, None)
719 return zip(a, b)
Georg Brandl116aa622007-08-15 14:28:22 +0000720
Raymond Hettinger44571da2013-05-05 19:53:41 -0700721 def grouper(iterable, n, fillvalue=None):
Raymond Hettinger9ae94732012-07-08 16:04:03 -0700722 "Collect data into fixed-length chunks or blocks"
Raymond Hettinger44571da2013-05-05 19:53:41 -0700723 # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
Raymond Hettinger30c73622010-12-01 23:45:20 +0000724 args = [iter(iterable)] * n
725 return zip_longest(*args, fillvalue=fillvalue)
Georg Brandl116aa622007-08-15 14:28:22 +0000726
Raymond Hettinger30c73622010-12-01 23:45:20 +0000727 def roundrobin(*iterables):
728 "roundrobin('ABC', 'D', 'EF') --> A D E B F C"
729 # Recipe credited to George Sakkis
730 pending = len(iterables)
731 nexts = cycle(iter(it).__next__ for it in iterables)
732 while pending:
733 try:
734 for next in nexts:
735 yield next()
736 except StopIteration:
737 pending -= 1
738 nexts = cycle(islice(nexts, pending))
Georg Brandl116aa622007-08-15 14:28:22 +0000739
Raymond Hettinger30c73622010-12-01 23:45:20 +0000740 def partition(pred, iterable):
741 'Use a predicate to partition entries into false entries and true entries'
742 # partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9
743 t1, t2 = tee(iterable)
744 return filterfalse(pred, t1), filter(pred, t2)
Raymond Hettinger5ce0aa22010-12-01 10:49:19 +0000745
Raymond Hettinger30c73622010-12-01 23:45:20 +0000746 def powerset(iterable):
747 "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
748 s = list(iterable)
749 return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
Raymond Hettinger08d01ee2010-08-07 05:36:53 +0000750
Raymond Hettinger30c73622010-12-01 23:45:20 +0000751 def unique_everseen(iterable, key=None):
752 "List unique elements, preserving order. Remember all elements ever seen."
753 # unique_everseen('AAAABBBCCDAABBB') --> A B C D
754 # unique_everseen('ABBCcAD', str.lower) --> A B C D
755 seen = set()
756 seen_add = seen.add
757 if key is None:
758 for element in filterfalse(seen.__contains__, iterable):
759 seen_add(element)
760 yield element
761 else:
762 for element in iterable:
763 k = key(element)
764 if k not in seen:
765 seen_add(k)
766 yield element
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000767
Raymond Hettinger30c73622010-12-01 23:45:20 +0000768 def unique_justseen(iterable, key=None):
769 "List unique elements, preserving order. Remember only the element just seen."
770 # unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
771 # unique_justseen('ABBCcAD', str.lower) --> A B C A D
772 return map(next, map(itemgetter(1), groupby(iterable, key)))
Raymond Hettingerad9d96b2009-01-02 21:39:07 +0000773
Raymond Hettinger30c73622010-12-01 23:45:20 +0000774 def iter_except(func, exception, first=None):
775 """ Call a function repeatedly until an exception is raised.
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000776
Raymond Hettinger30c73622010-12-01 23:45:20 +0000777 Converts a call-until-exception interface to an iterator interface.
Andrew Kuchling1d7d5802013-06-20 21:17:41 -0400778 Like builtins.iter(func, sentinel) but uses an exception instead
Raymond Hettinger30c73622010-12-01 23:45:20 +0000779 of a sentinel to end the loop.
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000780
Raymond Hettinger30c73622010-12-01 23:45:20 +0000781 Examples:
782 iter_except(functools.partial(heappop, h), IndexError) # priority queue iterator
783 iter_except(d.popitem, KeyError) # non-blocking dict iterator
784 iter_except(d.popleft, IndexError) # non-blocking deque iterator
785 iter_except(q.get_nowait, Queue.Empty) # loop over a producer Queue
786 iter_except(s.pop, KeyError) # non-blocking set iterator
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000787
Raymond Hettinger30c73622010-12-01 23:45:20 +0000788 """
789 try:
790 if first is not None:
791 yield first() # For database APIs needing an initial cast to db.first()
792 while 1:
793 yield func()
794 except exception:
795 pass
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000796
Raymond Hettinger31b26f62014-04-02 03:16:42 -0700797 def first_true(iterable, default=False, pred=None):
798 """Returns the first true value in the iterable.
799
800 If no true value is found, returns *default*
801
802 If *pred* is not None, returns the first item
803 for which pred(item) is true.
804
805 """
806 # first_true([a,b,c], x) --> a or b or c or x
807 # first_true([a,b], x, f) --> a if f(a) else b if f(b) else x
808 return next(filter(pred, iterable), default)
809
Raymond Hettinger30c73622010-12-01 23:45:20 +0000810 def random_product(*args, repeat=1):
811 "Random selection from itertools.product(*args, **kwds)"
812 pools = [tuple(pool) for pool in args] * repeat
813 return tuple(random.choice(pool) for pool in pools)
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000814
Raymond Hettinger30c73622010-12-01 23:45:20 +0000815 def random_permutation(iterable, r=None):
816 "Random selection from itertools.permutations(iterable, r)"
817 pool = tuple(iterable)
818 r = len(pool) if r is None else r
819 return tuple(random.sample(pool, r))
Raymond Hettinger063a4b62010-04-02 04:18:18 +0000820
Raymond Hettinger30c73622010-12-01 23:45:20 +0000821 def random_combination(iterable, r):
822 "Random selection from itertools.combinations(iterable, r)"
823 pool = tuple(iterable)
824 n = len(pool)
825 indices = sorted(random.sample(range(n), r))
826 return tuple(pool[i] for i in indices)
Raymond Hettinger063a4b62010-04-02 04:18:18 +0000827
Raymond Hettinger30c73622010-12-01 23:45:20 +0000828 def random_combination_with_replacement(iterable, r):
829 "Random selection from itertools.combinations_with_replacement(iterable, r)"
830 pool = tuple(iterable)
831 n = len(pool)
832 indices = sorted(random.randrange(n) for i in range(r))
833 return tuple(pool[i] for i in indices)
Raymond Hettinger063a4b62010-04-02 04:18:18 +0000834
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000835Note, many of the above recipes can be optimized by replacing global lookups
836with local variables defined as default values. For example, the
837*dotproduct* recipe can be written as::
838
Raymond Hettinger30c73622010-12-01 23:45:20 +0000839 def dotproduct(vec1, vec2, sum=sum, map=map, mul=operator.mul):
840 return sum(map(mul, vec1, vec2))