blob: 1eb554a40ae3518d9df4d5b4fdccb14de8532e8e [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
Raymond Hettinger5bfd8ce2009-04-10 19:02:36 +000046==================== ============================ ================================================= =============================================================
47Iterator Arguments Results Example
48==================== ============================ ================================================= =============================================================
Raymond Hettinger5d446132011-03-27 18:52:10 -070049:func:`accumulate` p [,func] p0, p0+p1, p0+p1+p2, ... ``accumulate([1,2,3,4,5]) --> 1 3 6 10 15``
Raymond Hettinger5bfd8ce2009-04-10 19:02:36 +000050:func:`chain` p, q, ... p0, p1, ... plast, q0, q1, ... ``chain('ABC', 'DEF') --> A B C D E F``
51: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``
52: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``
Georg Brandlc2da5ce2009-08-13 09:16:39 +000053:func:`filterfalse` pred, seq elements of seq where pred(elem) is False ``filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8``
Raymond Hettinger5bfd8ce2009-04-10 19:02:36 +000054:func:`groupby` iterable[, keyfunc] sub-iterators grouped by value of keyfunc(v)
55:func:`islice` seq, [start,] stop [, step] elements from seq[start:stop:step] ``islice('ABCDEFG', 2, None) --> C D E F G``
56:func:`starmap` func, seq func(\*seq[0]), func(\*seq[1]), ... ``starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000``
57:func:`takewhile` pred, seq seq[0], seq[1], until pred fails ``takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4``
58:func:`tee` it, n it1, it2 , ... itn splits one iterator into n
Georg Brandlc2da5ce2009-08-13 09:16:39 +000059:func:`zip_longest` p, q, ... (p[0], q[0]), (p[1], q[1]), ... ``zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-``
Raymond Hettinger5bfd8ce2009-04-10 19:02:36 +000060==================== ============================ ================================================= =============================================================
Raymond Hettingerf76b9202009-02-17 20:00:59 +000061
62**Combinatoric generators:**
63
Raymond Hettinger7f587cd2009-04-10 19:43:50 +000064============================================== ==================== =============================================================
65Iterator Arguments Results
66============================================== ==================== =============================================================
67:func:`product` p, q, ... [repeat=1] cartesian product, equivalent to a nested for-loop
68:func:`permutations` p[, r] r-length tuples, all possible orderings, no repeated elements
Raymond Hettinger36c3c022009-11-19 01:20:07 +000069:func:`combinations` p, r r-length tuples, in sorted order, no repeated elements
70:func:`combinations_with_replacement` p, r r-length tuples, in sorted order, with repeated elements
Raymond Hettinger7f587cd2009-04-10 19:43:50 +000071``product('ABCD', repeat=2)`` ``AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD``
72``permutations('ABCD', 2)`` ``AB AC AD BA BC BD CA CB CD DA DB DC``
73``combinations('ABCD', 2)`` ``AB AC AD BC BD CD``
74``combinations_with_replacement('ABCD', 2)`` ``AA AB AC AD BB BC BD CC CD DD``
75============================================== ==================== =============================================================
Georg Brandl116aa622007-08-15 14:28:22 +000076
77
78.. _itertools-functions:
79
80Itertool functions
81------------------
82
83The following module functions all construct and return iterators. Some provide
84streams of infinite length, so they should only be accessed by functions or
85loops that truncate the stream.
86
Raymond Hettinger5d446132011-03-27 18:52:10 -070087.. function:: accumulate(iterable[, func])
Raymond Hettingeradb81462010-12-01 22:50:36 +000088
Raymond Hettinger2d93e6e2010-12-03 02:33:53 +000089 Make an iterator that returns accumulated sums. Elements may be any addable
Raymond Hettinger5d446132011-03-27 18:52:10 -070090 type including :class:`Decimal` or :class:`Fraction`. If the optional
91 *func* argument is supplied, it should be a function of two arguments
92 and it will be used instead of addition.
Raymond Hettingeradb81462010-12-01 22:50:36 +000093
Raymond Hettinger5d446132011-03-27 18:52:10 -070094 Equivalent to::
95
96 def accumulate(iterable, func=operator.add):
Raymond Hettingeradb81462010-12-01 22:50:36 +000097 'Return running totals'
Raymond Hettingerd8ff4652010-12-03 02:09:34 +000098 # accumulate([1,2,3,4,5]) --> 1 3 6 10 15
Raymond Hettinger5d446132011-03-27 18:52:10 -070099 # accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
Raymond Hettingerd8ff4652010-12-03 02:09:34 +0000100 it = iter(iterable)
101 total = next(it)
102 yield total
103 for element in it:
Raymond Hettinger5d446132011-03-27 18:52:10 -0700104 total = func(total, element)
Raymond Hettingerd8ff4652010-12-03 02:09:34 +0000105 yield total
Raymond Hettingeradb81462010-12-01 22:50:36 +0000106
Raymond Hettinger295c1d42011-04-21 11:09:28 -0700107 There are a number of uses for the *func* argument. It can be set to
108 :func:`min` for a running minimum, :func:`max` for a running maximum, or
109 :func:`operator.mul` for a running product. Amortization tables can be
110 built by accumulating interest and applying payments. First-order
111 `recurrence relations <http://en.wikipedia.org/wiki/Recurrence_relation>`_
112 can be modeled by supplying the initial value in the iterable and using only
113 the accumulated total in *func* argument::
Raymond Hettinger5d446132011-03-27 18:52:10 -0700114
115 >>> data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
116 >>> list(accumulate(data, operator.mul)) # running product
117 [3, 12, 72, 144, 144, 1296, 0, 0, 0, 0]
118 >>> list(accumulate(data, max)) # running maximum
119 [3, 4, 6, 6, 6, 9, 9, 9, 9, 9]
120
121 # Amortize a 5% loan of 1000 with 4 annual payments of 90
122 >>> cashflows = [1000, -90, -90, -90, -90]
123 >>> list(accumulate(cashflows, lambda bal, pmt: bal*1.05 + pmt))
124 [1000, 960.0, 918.0, 873.9000000000001, 827.5950000000001]
125
Raymond Hettinger295c1d42011-04-21 11:09:28 -0700126 # Chaotic recurrence relation http://en.wikipedia.org/wiki/Logistic_map
127 >>> logistic_map = lambda x, _: r * x * (1 - x)
128 >>> r = 3.8
129 >>> x0 = 0.4
130 >>> inputs = repeat(x0, 36) # only the initial value is used
131 >>> [format(x, '.2f') for x in accumulate(inputs, logistic_map)]
132 ['0.40', '0.91', '0.30', '0.81', '0.60', '0.92', '0.29', '0.79', '0.63',
133 '0.88' ,'0.39', '0.90', '0.33', '0.84', '0.52', '0.95', '0.18', '0.57',
134 '0.93', '0.25', '0.71', '0.79', '0.63', '0.88', '0.39', '0.91', '0.32',
135 '0.83', '0.54', '0.95', '0.20', '0.60', '0.91', '0.30', '0.80', '0.60']
136
Raymond Hettingeradb81462010-12-01 22:50:36 +0000137 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000138
Raymond Hettinger5d446132011-03-27 18:52:10 -0700139 .. versionchanged:: 3.3
140 Added the optional *func* parameter.
141
Georg Brandl116aa622007-08-15 14:28:22 +0000142.. function:: chain(*iterables)
143
Raymond Hettinger30c73622010-12-01 23:45:20 +0000144 Make an iterator that returns elements from the first iterable until it is
145 exhausted, then proceeds to the next iterable, until all of the iterables are
146 exhausted. Used for treating consecutive sequences as a single sequence.
147 Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000148
Raymond Hettinger30c73622010-12-01 23:45:20 +0000149 def chain(*iterables):
150 # chain('ABC', 'DEF') --> A B C D E F
151 for it in iterables:
152 for element in it:
153 yield element
Georg Brandl116aa622007-08-15 14:28:22 +0000154
155
Georg Brandl933b9742010-07-29 14:36:11 +0000156.. classmethod:: chain.from_iterable(iterable)
Christian Heimes70e7ea22008-02-28 20:02:27 +0000157
Raymond Hettinger30c73622010-12-01 23:45:20 +0000158 Alternate constructor for :func:`chain`. Gets chained inputs from a
159 single iterable argument that is evaluated lazily. Equivalent to::
Christian Heimes70e7ea22008-02-28 20:02:27 +0000160
Raymond Hettinger30c73622010-12-01 23:45:20 +0000161 @classmethod
162 def from_iterable(iterables):
163 # chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
164 for it in iterables:
165 for element in it:
166 yield element
Christian Heimes70e7ea22008-02-28 20:02:27 +0000167
Christian Heimes78644762008-03-04 23:39:23 +0000168
Christian Heimes836baa52008-02-26 08:18:30 +0000169.. function:: combinations(iterable, r)
170
Raymond Hettinger30c73622010-12-01 23:45:20 +0000171 Return *r* length subsequences of elements from the input *iterable*.
Christian Heimes836baa52008-02-26 08:18:30 +0000172
Raymond Hettinger30c73622010-12-01 23:45:20 +0000173 Combinations are emitted in lexicographic sort order. So, if the
174 input *iterable* is sorted, the combination tuples will be produced
175 in sorted order.
Christian Heimes836baa52008-02-26 08:18:30 +0000176
Raymond Hettinger30c73622010-12-01 23:45:20 +0000177 Elements are treated as unique based on their position, not on their
178 value. So if the input elements are unique, there will be no repeat
179 values in each combination.
Christian Heimes836baa52008-02-26 08:18:30 +0000180
Raymond Hettinger30c73622010-12-01 23:45:20 +0000181 Equivalent to::
Christian Heimes836baa52008-02-26 08:18:30 +0000182
183 def combinations(iterable, r):
Raymond Hettingerdd1150e2008-03-13 02:39:40 +0000184 # combinations('ABCD', 2) --> AB AC AD BC BD CD
185 # combinations(range(4), 3) --> 012 013 023 123
Christian Heimes836baa52008-02-26 08:18:30 +0000186 pool = tuple(iterable)
Christian Heimes380f7f22008-02-28 11:19:05 +0000187 n = len(pool)
Raymond Hettinger5bad41e2009-01-08 21:01:54 +0000188 if r > n:
189 return
190 indices = list(range(r))
Christian Heimesb558a2e2008-03-02 22:46:37 +0000191 yield tuple(pool[i] for i in indices)
Raymond Hettingercf984ce2009-02-18 20:56:51 +0000192 while True:
Christian Heimes380f7f22008-02-28 11:19:05 +0000193 for i in reversed(range(r)):
Christian Heimesb558a2e2008-03-02 22:46:37 +0000194 if indices[i] != i + n - r:
Christian Heimes836baa52008-02-26 08:18:30 +0000195 break
Christian Heimes380f7f22008-02-28 11:19:05 +0000196 else:
197 return
Christian Heimesb558a2e2008-03-02 22:46:37 +0000198 indices[i] += 1
Christian Heimes380f7f22008-02-28 11:19:05 +0000199 for j in range(i+1, r):
Christian Heimesb558a2e2008-03-02 22:46:37 +0000200 indices[j] = indices[j-1] + 1
201 yield tuple(pool[i] for i in indices)
Christian Heimes836baa52008-02-26 08:18:30 +0000202
Raymond Hettinger30c73622010-12-01 23:45:20 +0000203 The code for :func:`combinations` can be also expressed as a subsequence
204 of :func:`permutations` after filtering entries where the elements are not
205 in sorted order (according to their position in the input pool)::
Christian Heimes78644762008-03-04 23:39:23 +0000206
207 def combinations(iterable, r):
208 pool = tuple(iterable)
209 n = len(pool)
210 for indices in permutations(range(n), r):
211 if sorted(indices) == list(indices):
212 yield tuple(pool[i] for i in indices)
213
Raymond Hettinger30c73622010-12-01 23:45:20 +0000214 The number of items returned is ``n! / r! / (n-r)!`` when ``0 <= r <= n``
215 or zero when ``r > n``.
Christian Heimes836baa52008-02-26 08:18:30 +0000216
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000217.. function:: combinations_with_replacement(iterable, r)
218
Raymond Hettinger30c73622010-12-01 23:45:20 +0000219 Return *r* length subsequences of elements from the input *iterable*
220 allowing individual elements to be repeated more than once.
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000221
Raymond Hettinger30c73622010-12-01 23:45:20 +0000222 Combinations are emitted in lexicographic sort order. So, if the
223 input *iterable* is sorted, the combination tuples will be produced
224 in sorted order.
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000225
Raymond Hettinger30c73622010-12-01 23:45:20 +0000226 Elements are treated as unique based on their position, not on their
227 value. So if the input elements are unique, the generated combinations
228 will also be unique.
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000229
Raymond Hettinger30c73622010-12-01 23:45:20 +0000230 Equivalent to::
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000231
232 def combinations_with_replacement(iterable, r):
233 # combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC
234 pool = tuple(iterable)
235 n = len(pool)
236 if not n and r:
237 return
238 indices = [0] * r
239 yield tuple(pool[i] for i in indices)
Raymond Hettingercf984ce2009-02-18 20:56:51 +0000240 while True:
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000241 for i in reversed(range(r)):
242 if indices[i] != n - 1:
243 break
244 else:
245 return
246 indices[i:] = [indices[i] + 1] * (r - i)
247 yield tuple(pool[i] for i in indices)
248
Raymond Hettinger30c73622010-12-01 23:45:20 +0000249 The code for :func:`combinations_with_replacement` can be also expressed as
250 a subsequence of :func:`product` after filtering entries where the elements
251 are not in sorted order (according to their position in the input pool)::
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000252
253 def combinations_with_replacement(iterable, r):
254 pool = tuple(iterable)
255 n = len(pool)
256 for indices in product(range(n), repeat=r):
257 if sorted(indices) == list(indices):
258 yield tuple(pool[i] for i in indices)
259
Raymond Hettinger30c73622010-12-01 23:45:20 +0000260 The number of items returned is ``(n+r-1)! / r! / (n-1)!`` when ``n > 0``.
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000261
Raymond Hettinger30c73622010-12-01 23:45:20 +0000262 .. versionadded:: 3.1
Raymond Hettingerd07d9392009-01-27 04:20:44 +0000263
Georg Brandl67b21b72010-08-17 15:07:14 +0000264
Raymond Hettinger6b3b0fc2009-01-26 02:56:58 +0000265.. function:: compress(data, selectors)
266
Raymond Hettinger30c73622010-12-01 23:45:20 +0000267 Make an iterator that filters elements from *data* returning only those that
268 have a corresponding element in *selectors* that evaluates to ``True``.
269 Stops when either the *data* or *selectors* iterables has been exhausted.
270 Equivalent to::
Raymond Hettinger6b3b0fc2009-01-26 02:56:58 +0000271
Raymond Hettinger30c73622010-12-01 23:45:20 +0000272 def compress(data, selectors):
273 # compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F
274 return (d for d, s in zip(data, selectors) if s)
Raymond Hettinger6b3b0fc2009-01-26 02:56:58 +0000275
Raymond Hettinger30c73622010-12-01 23:45:20 +0000276 .. versionadded:: 3.1
Raymond Hettinger6b3b0fc2009-01-26 02:56:58 +0000277
278
Raymond Hettinger9e8dbbc2009-02-14 04:21:49 +0000279.. function:: count(start=0, step=1)
Georg Brandl116aa622007-08-15 14:28:22 +0000280
Raymond Hettinger30c73622010-12-01 23:45:20 +0000281 Make an iterator that returns evenly spaced values starting with *n*. Often
282 used as an argument to :func:`map` to generate consecutive data points.
283 Also, used with :func:`zip` to add sequence numbers. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000284
Raymond Hettinger30c73622010-12-01 23:45:20 +0000285 def count(start=0, step=1):
286 # count(10) --> 10 11 12 13 14 ...
Georg Brandl37a80dc2011-01-13 07:31:18 +0000287 # count(2.5, 0.5) -> 2.5 3.0 3.5 ...
Raymond Hettinger30c73622010-12-01 23:45:20 +0000288 n = start
289 while True:
290 yield n
291 n += step
Georg Brandl116aa622007-08-15 14:28:22 +0000292
Raymond Hettinger30c73622010-12-01 23:45:20 +0000293 When counting with floating point numbers, better accuracy can sometimes be
294 achieved by substituting multiplicative code such as: ``(start + step * i
295 for i in count())``.
Raymond Hettinger5bc472a2009-06-17 01:40:52 +0000296
Raymond Hettinger30c73622010-12-01 23:45:20 +0000297 .. versionchanged:: 3.1
298 Added *step* argument and allowed non-integer arguments.
Georg Brandl116aa622007-08-15 14:28:22 +0000299
300.. function:: cycle(iterable)
301
Raymond Hettinger30c73622010-12-01 23:45:20 +0000302 Make an iterator returning elements from the iterable and saving a copy of each.
303 When the iterable is exhausted, return elements from the saved copy. Repeats
304 indefinitely. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000305
Raymond Hettinger30c73622010-12-01 23:45:20 +0000306 def cycle(iterable):
307 # cycle('ABCD') --> A B C D A B C D A B C D ...
308 saved = []
309 for element in iterable:
310 yield element
311 saved.append(element)
312 while saved:
313 for element in saved:
Georg Brandl116aa622007-08-15 14:28:22 +0000314 yield element
315
Raymond Hettinger30c73622010-12-01 23:45:20 +0000316 Note, this member of the toolkit may require significant auxiliary storage
317 (depending on the length of the iterable).
Georg Brandl116aa622007-08-15 14:28:22 +0000318
319
320.. function:: dropwhile(predicate, iterable)
321
Raymond Hettinger30c73622010-12-01 23:45:20 +0000322 Make an iterator that drops elements from the iterable as long as the predicate
323 is true; afterwards, returns every element. Note, the iterator does not produce
324 *any* output until the predicate first becomes false, so it may have a lengthy
325 start-up time. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000326
Raymond Hettinger30c73622010-12-01 23:45:20 +0000327 def dropwhile(predicate, iterable):
328 # dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
329 iterable = iter(iterable)
330 for x in iterable:
331 if not predicate(x):
332 yield x
333 break
334 for x in iterable:
335 yield x
Georg Brandl116aa622007-08-15 14:28:22 +0000336
Raymond Hettinger749761e2009-01-27 04:42:48 +0000337.. function:: filterfalse(predicate, iterable)
338
Raymond Hettinger30c73622010-12-01 23:45:20 +0000339 Make an iterator that filters elements from iterable returning only those for
340 which the predicate is ``False``. If *predicate* is ``None``, return the items
341 that are false. Equivalent to::
Raymond Hettinger749761e2009-01-27 04:42:48 +0000342
Raymond Hettinger30c73622010-12-01 23:45:20 +0000343 def filterfalse(predicate, iterable):
344 # filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8
345 if predicate is None:
346 predicate = bool
347 for x in iterable:
348 if not predicate(x):
349 yield x
Raymond Hettinger749761e2009-01-27 04:42:48 +0000350
Georg Brandl116aa622007-08-15 14:28:22 +0000351
Georg Brandl3dd33882009-06-01 17:35:27 +0000352.. function:: groupby(iterable, key=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000353
Raymond Hettinger30c73622010-12-01 23:45:20 +0000354 Make an iterator that returns consecutive keys and groups from the *iterable*.
355 The *key* is a function computing a key value for each element. If not
356 specified or is ``None``, *key* defaults to an identity function and returns
357 the element unchanged. Generally, the iterable needs to already be sorted on
358 the same key function.
Georg Brandl116aa622007-08-15 14:28:22 +0000359
Raymond Hettinger30c73622010-12-01 23:45:20 +0000360 The operation of :func:`groupby` is similar to the ``uniq`` filter in Unix. It
361 generates a break or new group every time the value of the key function changes
362 (which is why it is usually necessary to have sorted the data using the same key
363 function). That behavior differs from SQL's GROUP BY which aggregates common
364 elements regardless of their input order.
Georg Brandl116aa622007-08-15 14:28:22 +0000365
Raymond Hettinger30c73622010-12-01 23:45:20 +0000366 The returned group is itself an iterator that shares the underlying iterable
367 with :func:`groupby`. Because the source is shared, when the :func:`groupby`
368 object is advanced, the previous group is no longer visible. So, if that data
369 is needed later, it should be stored as a list::
Georg Brandl116aa622007-08-15 14:28:22 +0000370
Raymond Hettinger30c73622010-12-01 23:45:20 +0000371 groups = []
372 uniquekeys = []
373 data = sorted(data, key=keyfunc)
374 for k, g in groupby(data, keyfunc):
375 groups.append(list(g)) # Store group iterator as a list
376 uniquekeys.append(k)
Georg Brandl116aa622007-08-15 14:28:22 +0000377
Raymond Hettinger30c73622010-12-01 23:45:20 +0000378 :func:`groupby` is equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000379
Raymond Hettinger30c73622010-12-01 23:45:20 +0000380 class groupby:
381 # [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
382 # [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D
383 def __init__(self, iterable, key=None):
384 if key is None:
385 key = lambda x: x
386 self.keyfunc = key
387 self.it = iter(iterable)
388 self.tgtkey = self.currkey = self.currvalue = object()
389 def __iter__(self):
390 return self
391 def __next__(self):
392 while self.currkey == self.tgtkey:
393 self.currvalue = next(self.it) # Exit on StopIteration
394 self.currkey = self.keyfunc(self.currvalue)
395 self.tgtkey = self.currkey
396 return (self.currkey, self._grouper(self.tgtkey))
397 def _grouper(self, tgtkey):
398 while self.currkey == tgtkey:
399 yield self.currvalue
400 self.currvalue = next(self.it) # Exit on StopIteration
401 self.currkey = self.keyfunc(self.currvalue)
Georg Brandl116aa622007-08-15 14:28:22 +0000402
Georg Brandl116aa622007-08-15 14:28:22 +0000403
Ezio Melottie0add762012-09-14 06:32:35 +0300404.. function:: islice(iterable, stop)
405 islice(iterable, start, stop[, step])
Georg Brandl116aa622007-08-15 14:28:22 +0000406
Raymond Hettinger30c73622010-12-01 23:45:20 +0000407 Make an iterator that returns selected elements from the iterable. If *start* is
408 non-zero, then elements from the iterable are skipped until start is reached.
409 Afterward, elements are returned consecutively unless *step* is set higher than
410 one which results in items being skipped. If *stop* is ``None``, then iteration
411 continues until the iterator is exhausted, if at all; otherwise, it stops at the
412 specified position. Unlike regular slicing, :func:`islice` does not support
413 negative values for *start*, *stop*, or *step*. Can be used to extract related
414 fields from data where the internal structure has been flattened (for example, a
415 multi-line report may list a name field on every third line). Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000416
Raymond Hettinger30c73622010-12-01 23:45:20 +0000417 def islice(iterable, *args):
418 # islice('ABCDEFG', 2) --> A B
419 # islice('ABCDEFG', 2, 4) --> C D
420 # islice('ABCDEFG', 2, None) --> C D E F G
421 # islice('ABCDEFG', 0, None, 2) --> A C E G
422 s = slice(*args)
423 it = iter(range(s.start or 0, s.stop or sys.maxsize, s.step or 1))
424 nexti = next(it)
425 for i, element in enumerate(iterable):
426 if i == nexti:
427 yield element
428 nexti = next(it)
Georg Brandl116aa622007-08-15 14:28:22 +0000429
Raymond Hettinger30c73622010-12-01 23:45:20 +0000430 If *start* is ``None``, then iteration starts at zero. If *step* is ``None``,
431 then the step defaults to one.
Georg Brandl116aa622007-08-15 14:28:22 +0000432
Georg Brandl116aa622007-08-15 14:28:22 +0000433
Georg Brandl3dd33882009-06-01 17:35:27 +0000434.. function:: permutations(iterable, r=None)
Christian Heimes70e7ea22008-02-28 20:02:27 +0000435
Raymond Hettinger30c73622010-12-01 23:45:20 +0000436 Return successive *r* length permutations of elements in the *iterable*.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000437
Raymond Hettinger30c73622010-12-01 23:45:20 +0000438 If *r* is not specified or is ``None``, then *r* defaults to the length
439 of the *iterable* and all possible full-length permutations
440 are generated.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000441
Raymond Hettinger30c73622010-12-01 23:45:20 +0000442 Permutations are emitted in lexicographic sort order. So, if the
443 input *iterable* is sorted, the permutation tuples will be produced
444 in sorted order.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000445
Raymond Hettinger30c73622010-12-01 23:45:20 +0000446 Elements are treated as unique based on their position, not on their
447 value. So if the input elements are unique, there will be no repeat
448 values in each permutation.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000449
Raymond Hettinger30c73622010-12-01 23:45:20 +0000450 Equivalent to::
Christian Heimesb558a2e2008-03-02 22:46:37 +0000451
452 def permutations(iterable, r=None):
Raymond Hettingerdd1150e2008-03-13 02:39:40 +0000453 # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
454 # permutations(range(3)) --> 012 021 102 120 201 210
Christian Heimesb558a2e2008-03-02 22:46:37 +0000455 pool = tuple(iterable)
456 n = len(pool)
457 r = n if r is None else r
Raymond Hettinger5bad41e2009-01-08 21:01:54 +0000458 if r > n:
459 return
460 indices = list(range(n))
Sandro Tosi73866622011-12-25 17:25:45 +0100461 cycles = list(range(n, n-r, -1))
Christian Heimesb558a2e2008-03-02 22:46:37 +0000462 yield tuple(pool[i] for i in indices[:r])
463 while n:
464 for i in reversed(range(r)):
465 cycles[i] -= 1
466 if cycles[i] == 0:
467 indices[i:] = indices[i+1:] + indices[i:i+1]
468 cycles[i] = n - i
469 else:
470 j = cycles[i]
471 indices[i], indices[-j] = indices[-j], indices[i]
472 yield tuple(pool[i] for i in indices[:r])
473 break
474 else:
475 return
Christian Heimes70e7ea22008-02-28 20:02:27 +0000476
Raymond Hettinger30c73622010-12-01 23:45:20 +0000477 The code for :func:`permutations` can be also expressed as a subsequence of
478 :func:`product`, filtered to exclude entries with repeated elements (those
479 from the same position in the input pool)::
Christian Heimes78644762008-03-04 23:39:23 +0000480
481 def permutations(iterable, r=None):
482 pool = tuple(iterable)
483 n = len(pool)
484 r = n if r is None else r
485 for indices in product(range(n), repeat=r):
486 if len(set(indices)) == r:
487 yield tuple(pool[i] for i in indices)
488
Raymond Hettinger30c73622010-12-01 23:45:20 +0000489 The number of items returned is ``n! / (n-r)!`` when ``0 <= r <= n``
490 or zero when ``r > n``.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000491
Georg Brandl3dd33882009-06-01 17:35:27 +0000492.. function:: product(*iterables, repeat=1)
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000493
Raymond Hettinger30c73622010-12-01 23:45:20 +0000494 Cartesian product of input iterables.
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000495
Raymond Hettinger30c73622010-12-01 23:45:20 +0000496 Equivalent to nested for-loops in a generator expression. For example,
497 ``product(A, B)`` returns the same as ``((x,y) for x in A for y in B)``.
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000498
Raymond Hettinger30c73622010-12-01 23:45:20 +0000499 The nested loops cycle like an odometer with the rightmost element advancing
500 on every iteration. This pattern creates a lexicographic ordering so that if
501 the input's iterables are sorted, the product tuples are emitted in sorted
502 order.
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000503
Raymond Hettinger30c73622010-12-01 23:45:20 +0000504 To compute the product of an iterable with itself, specify the number of
505 repetitions with the optional *repeat* keyword argument. For example,
506 ``product(A, repeat=4)`` means the same as ``product(A, A, A, A)``.
Christian Heimes9e7f1d22008-02-28 12:27:11 +0000507
Raymond Hettinger30c73622010-12-01 23:45:20 +0000508 This function is equivalent to the following code, except that the
509 actual implementation does not build up intermediate results in memory::
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000510
Raymond Hettinger30c73622010-12-01 23:45:20 +0000511 def product(*args, repeat=1):
512 # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
513 # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
514 pools = [tuple(pool) for pool in args] * repeat
515 result = [[]]
516 for pool in pools:
517 result = [x+[y] for x in result for y in pool]
518 for prod in result:
519 yield tuple(prod)
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000520
521
Raymond Hettingerd75ad442009-06-01 19:16:52 +0000522.. function:: repeat(object[, times])
Georg Brandl116aa622007-08-15 14:28:22 +0000523
Raymond Hettinger30c73622010-12-01 23:45:20 +0000524 Make an iterator that returns *object* over and over again. Runs indefinitely
525 unless the *times* argument is specified. Used as argument to :func:`map` for
526 invariant parameters to the called function. Also used with :func:`zip` to
527 create an invariant part of a tuple record. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000528
Raymond Hettinger30c73622010-12-01 23:45:20 +0000529 def repeat(object, times=None):
530 # repeat(10, 3) --> 10 10 10
531 if times is None:
532 while True:
533 yield object
534 else:
535 for i in range(times):
536 yield object
Georg Brandl116aa622007-08-15 14:28:22 +0000537
Raymond Hettingerfc3ba6b2012-02-01 09:07:40 -0800538 A common use for *repeat* is to supply a stream of constant values to *map*
539 or *zip*::
540
541 >>> list(map(pow, range(10), repeat(2)))
542 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Georg Brandl116aa622007-08-15 14:28:22 +0000543
544.. function:: starmap(function, iterable)
545
Raymond Hettinger30c73622010-12-01 23:45:20 +0000546 Make an iterator that computes the function using arguments obtained from
547 the iterable. Used instead of :func:`map` when argument parameters are already
548 grouped in tuples from a single iterable (the data has been "pre-zipped"). The
549 difference between :func:`map` and :func:`starmap` parallels the distinction
550 between ``function(a,b)`` and ``function(*c)``. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000551
Raymond Hettinger30c73622010-12-01 23:45:20 +0000552 def starmap(function, iterable):
553 # starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000
554 for args in iterable:
555 yield function(*args)
Christian Heimes679db4a2008-01-18 09:56:22 +0000556
Georg Brandl116aa622007-08-15 14:28:22 +0000557
558.. function:: takewhile(predicate, iterable)
559
Raymond Hettinger30c73622010-12-01 23:45:20 +0000560 Make an iterator that returns elements from the iterable as long as the
561 predicate is true. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000562
Raymond Hettinger30c73622010-12-01 23:45:20 +0000563 def takewhile(predicate, iterable):
564 # takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4
565 for x in iterable:
566 if predicate(x):
567 yield x
568 else:
569 break
Georg Brandl116aa622007-08-15 14:28:22 +0000570
571
Georg Brandl3dd33882009-06-01 17:35:27 +0000572.. function:: tee(iterable, n=2)
Georg Brandl116aa622007-08-15 14:28:22 +0000573
Raymond Hettinger30c73622010-12-01 23:45:20 +0000574 Return *n* independent iterators from a single iterable. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000575
Raymond Hettingercf984ce2009-02-18 20:56:51 +0000576 def tee(iterable, n=2):
577 it = iter(iterable)
578 deques = [collections.deque() for i in range(n)]
579 def gen(mydeque):
580 while True:
581 if not mydeque: # when the local deque is empty
582 newval = next(it) # fetch a new value and
583 for d in deques: # load it to all the deques
584 d.append(newval)
585 yield mydeque.popleft()
586 return tuple(gen(d) for d in deques)
Georg Brandl116aa622007-08-15 14:28:22 +0000587
Raymond Hettinger30c73622010-12-01 23:45:20 +0000588 Once :func:`tee` has made a split, the original *iterable* should not be
589 used anywhere else; otherwise, the *iterable* could get advanced without
590 the tee objects being informed.
Georg Brandl116aa622007-08-15 14:28:22 +0000591
Raymond Hettinger30c73622010-12-01 23:45:20 +0000592 This itertool may require significant auxiliary storage (depending on how
593 much temporary data needs to be stored). In general, if one iterator uses
594 most or all of the data before another iterator starts, it is faster to use
595 :func:`list` instead of :func:`tee`.
Georg Brandl116aa622007-08-15 14:28:22 +0000596
Georg Brandl116aa622007-08-15 14:28:22 +0000597
Georg Brandl3dd33882009-06-01 17:35:27 +0000598.. function:: zip_longest(*iterables, fillvalue=None)
Raymond Hettinger749761e2009-01-27 04:42:48 +0000599
Raymond Hettinger30c73622010-12-01 23:45:20 +0000600 Make an iterator that aggregates elements from each of the iterables. If the
601 iterables are of uneven length, missing values are filled-in with *fillvalue*.
602 Iteration continues until the longest iterable is exhausted. Equivalent to::
Raymond Hettinger749761e2009-01-27 04:42:48 +0000603
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700604 class ZipExhausted(Exception):
605 pass
606
607 def zip_longest(*args, **kwds):
Raymond Hettinger30c73622010-12-01 23:45:20 +0000608 # zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700609 fillvalue = kwds.get('fillvalue')
610 counter = len(args) - 1
611 def sentinel():
612 nonlocal counter
613 if not counter:
614 raise ZipExhausted
615 counter -= 1
616 yield fillvalue
Raymond Hettinger30c73622010-12-01 23:45:20 +0000617 fillers = repeat(fillvalue)
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700618 iterators = [chain(it, sentinel(), fillers) for it in args]
Raymond Hettinger30c73622010-12-01 23:45:20 +0000619 try:
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700620 while iterators:
621 yield tuple(map(next, iterators))
622 except ZipExhausted:
Raymond Hettinger30c73622010-12-01 23:45:20 +0000623 pass
Raymond Hettinger749761e2009-01-27 04:42:48 +0000624
Raymond Hettinger30c73622010-12-01 23:45:20 +0000625 If one of the iterables is potentially infinite, then the :func:`zip_longest`
626 function should be wrapped with something that limits the number of calls
627 (for example :func:`islice` or :func:`takewhile`). If not specified,
628 *fillvalue* defaults to ``None``.
Raymond Hettinger749761e2009-01-27 04:42:48 +0000629
630
Georg Brandl116aa622007-08-15 14:28:22 +0000631.. _itertools-recipes:
632
Raymond Hettinger1fa76822010-12-06 23:31:36 +0000633Itertools Recipes
634-----------------
Georg Brandl116aa622007-08-15 14:28:22 +0000635
636This section shows recipes for creating an extended toolset using the existing
637itertools as building blocks.
638
639The extended tools offer the same high performance as the underlying toolset.
640The superior memory performance is kept by processing elements one at a time
641rather than bringing the whole iterable into memory all at once. Code volume is
642kept small by linking the tools together in a functional style which helps
643eliminate temporary variables. High speed is retained by preferring
Georg Brandl9afde1c2007-11-01 20:32:30 +0000644"vectorized" building blocks over the use of for-loops and :term:`generator`\s
Christian Heimesfe337bf2008-03-23 21:54:12 +0000645which incur interpreter overhead.
646
647.. testcode::
Georg Brandl116aa622007-08-15 14:28:22 +0000648
Raymond Hettinger30c73622010-12-01 23:45:20 +0000649 def take(n, iterable):
650 "Return first n items of the iterable as a list"
651 return list(islice(iterable, n))
Georg Brandl116aa622007-08-15 14:28:22 +0000652
Raymond Hettinger30c73622010-12-01 23:45:20 +0000653 def tabulate(function, start=0):
654 "Return function(0), function(1), ..."
655 return map(function, count(start))
Raymond Hettingerdd1150e2008-03-13 02:39:40 +0000656
Raymond Hettinger30c73622010-12-01 23:45:20 +0000657 def consume(iterator, n):
658 "Advance the iterator n-steps ahead. If n is none, consume entirely."
659 # Use functions that consume iterators at C speed.
660 if n is None:
661 # feed the entire iterator into a zero-length deque
662 collections.deque(iterator, maxlen=0)
663 else:
664 # advance to the empty slice starting at position n
665 next(islice(iterator, n, n), None)
Raymond Hettingerfa007962009-03-09 11:55:25 +0000666
Raymond Hettinger30c73622010-12-01 23:45:20 +0000667 def nth(iterable, n, default=None):
668 "Returns the nth item or a default value"
669 return next(islice(iterable, n, None), default)
Georg Brandl116aa622007-08-15 14:28:22 +0000670
Raymond Hettinger30c73622010-12-01 23:45:20 +0000671 def quantify(iterable, pred=bool):
672 "Count how many times the predicate is true"
673 return sum(map(pred, iterable))
Georg Brandl116aa622007-08-15 14:28:22 +0000674
Raymond Hettinger30c73622010-12-01 23:45:20 +0000675 def padnone(iterable):
676 """Returns the sequence elements and then returns None indefinitely.
Georg Brandl116aa622007-08-15 14:28:22 +0000677
Raymond Hettinger30c73622010-12-01 23:45:20 +0000678 Useful for emulating the behavior of the built-in map() function.
679 """
680 return chain(iterable, repeat(None))
Georg Brandl116aa622007-08-15 14:28:22 +0000681
Raymond Hettinger30c73622010-12-01 23:45:20 +0000682 def ncycles(iterable, n):
683 "Returns the sequence elements n times"
684 return chain.from_iterable(repeat(tuple(iterable), n))
Georg Brandl116aa622007-08-15 14:28:22 +0000685
Raymond Hettinger30c73622010-12-01 23:45:20 +0000686 def dotproduct(vec1, vec2):
687 return sum(map(operator.mul, vec1, vec2))
Georg Brandl116aa622007-08-15 14:28:22 +0000688
Raymond Hettinger30c73622010-12-01 23:45:20 +0000689 def flatten(listOfLists):
690 "Flatten one level of nesting"
691 return chain.from_iterable(listOfLists)
Georg Brandl116aa622007-08-15 14:28:22 +0000692
Raymond Hettinger30c73622010-12-01 23:45:20 +0000693 def repeatfunc(func, times=None, *args):
694 """Repeat calls to func with specified arguments.
Georg Brandl116aa622007-08-15 14:28:22 +0000695
Raymond Hettinger30c73622010-12-01 23:45:20 +0000696 Example: repeatfunc(random.random)
697 """
698 if times is None:
699 return starmap(func, repeat(args))
700 return starmap(func, repeat(args, times))
Georg Brandl116aa622007-08-15 14:28:22 +0000701
Raymond Hettinger30c73622010-12-01 23:45:20 +0000702 def pairwise(iterable):
703 "s -> (s0,s1), (s1,s2), (s2, s3), ..."
704 a, b = tee(iterable)
705 next(b, None)
706 return zip(a, b)
Georg Brandl116aa622007-08-15 14:28:22 +0000707
Raymond Hettinger30c73622010-12-01 23:45:20 +0000708 def grouper(n, iterable, fillvalue=None):
Raymond Hettinger9ae94732012-07-08 16:04:03 -0700709 "Collect data into fixed-length chunks or blocks"
710 # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
Raymond Hettinger30c73622010-12-01 23:45:20 +0000711 args = [iter(iterable)] * n
712 return zip_longest(*args, fillvalue=fillvalue)
Georg Brandl116aa622007-08-15 14:28:22 +0000713
Raymond Hettinger30c73622010-12-01 23:45:20 +0000714 def roundrobin(*iterables):
715 "roundrobin('ABC', 'D', 'EF') --> A D E B F C"
716 # Recipe credited to George Sakkis
717 pending = len(iterables)
718 nexts = cycle(iter(it).__next__ for it in iterables)
719 while pending:
720 try:
721 for next in nexts:
722 yield next()
723 except StopIteration:
724 pending -= 1
725 nexts = cycle(islice(nexts, pending))
Georg Brandl116aa622007-08-15 14:28:22 +0000726
Raymond Hettinger30c73622010-12-01 23:45:20 +0000727 def partition(pred, iterable):
728 'Use a predicate to partition entries into false entries and true entries'
729 # partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9
730 t1, t2 = tee(iterable)
731 return filterfalse(pred, t1), filter(pred, t2)
Raymond Hettinger5ce0aa22010-12-01 10:49:19 +0000732
Raymond Hettinger30c73622010-12-01 23:45:20 +0000733 def powerset(iterable):
734 "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
735 s = list(iterable)
736 return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
Raymond Hettinger08d01ee2010-08-07 05:36:53 +0000737
Raymond Hettinger30c73622010-12-01 23:45:20 +0000738 def unique_everseen(iterable, key=None):
739 "List unique elements, preserving order. Remember all elements ever seen."
740 # unique_everseen('AAAABBBCCDAABBB') --> A B C D
741 # unique_everseen('ABBCcAD', str.lower) --> A B C D
742 seen = set()
743 seen_add = seen.add
744 if key is None:
745 for element in filterfalse(seen.__contains__, iterable):
746 seen_add(element)
747 yield element
748 else:
749 for element in iterable:
750 k = key(element)
751 if k not in seen:
752 seen_add(k)
753 yield element
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000754
Raymond Hettinger30c73622010-12-01 23:45:20 +0000755 def unique_justseen(iterable, key=None):
756 "List unique elements, preserving order. Remember only the element just seen."
757 # unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
758 # unique_justseen('ABBCcAD', str.lower) --> A B C A D
759 return map(next, map(itemgetter(1), groupby(iterable, key)))
Raymond Hettingerad9d96b2009-01-02 21:39:07 +0000760
Raymond Hettinger30c73622010-12-01 23:45:20 +0000761 def iter_except(func, exception, first=None):
762 """ Call a function repeatedly until an exception is raised.
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000763
Raymond Hettinger30c73622010-12-01 23:45:20 +0000764 Converts a call-until-exception interface to an iterator interface.
765 Like __builtin__.iter(func, sentinel) but uses an exception instead
766 of a sentinel to end the loop.
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000767
Raymond Hettinger30c73622010-12-01 23:45:20 +0000768 Examples:
769 iter_except(functools.partial(heappop, h), IndexError) # priority queue iterator
770 iter_except(d.popitem, KeyError) # non-blocking dict iterator
771 iter_except(d.popleft, IndexError) # non-blocking deque iterator
772 iter_except(q.get_nowait, Queue.Empty) # loop over a producer Queue
773 iter_except(s.pop, KeyError) # non-blocking set iterator
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000774
Raymond Hettinger30c73622010-12-01 23:45:20 +0000775 """
776 try:
777 if first is not None:
778 yield first() # For database APIs needing an initial cast to db.first()
779 while 1:
780 yield func()
781 except exception:
782 pass
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000783
Raymond Hettinger30c73622010-12-01 23:45:20 +0000784 def random_product(*args, repeat=1):
785 "Random selection from itertools.product(*args, **kwds)"
786 pools = [tuple(pool) for pool in args] * repeat
787 return tuple(random.choice(pool) for pool in pools)
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000788
Raymond Hettinger30c73622010-12-01 23:45:20 +0000789 def random_permutation(iterable, r=None):
790 "Random selection from itertools.permutations(iterable, r)"
791 pool = tuple(iterable)
792 r = len(pool) if r is None else r
793 return tuple(random.sample(pool, r))
Raymond Hettinger063a4b62010-04-02 04:18:18 +0000794
Raymond Hettinger30c73622010-12-01 23:45:20 +0000795 def random_combination(iterable, r):
796 "Random selection from itertools.combinations(iterable, r)"
797 pool = tuple(iterable)
798 n = len(pool)
799 indices = sorted(random.sample(range(n), r))
800 return tuple(pool[i] for i in indices)
Raymond Hettinger063a4b62010-04-02 04:18:18 +0000801
Raymond Hettinger30c73622010-12-01 23:45:20 +0000802 def random_combination_with_replacement(iterable, r):
803 "Random selection from itertools.combinations_with_replacement(iterable, r)"
804 pool = tuple(iterable)
805 n = len(pool)
806 indices = sorted(random.randrange(n) for i in range(r))
807 return tuple(pool[i] for i in indices)
Raymond Hettinger063a4b62010-04-02 04:18:18 +0000808
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000809Note, many of the above recipes can be optimized by replacing global lookups
810with local variables defined as default values. For example, the
811*dotproduct* recipe can be written as::
812
Raymond Hettinger30c73622010-12-01 23:45:20 +0000813 def dotproduct(vec1, vec2, sum=sum, map=map, mul=operator.mul):
814 return sum(map(mul, vec1, vec2))