blob: 994a25ae5d5c8e50676c7cd29e9c88c39227344c [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
Georg Brandl116aa622007-08-15 14:28:22 +0000404.. function:: islice(iterable, [start,] stop [, step])
405
Raymond Hettinger30c73622010-12-01 23:45:20 +0000406 Make an iterator that returns selected elements from the iterable. If *start* is
407 non-zero, then elements from the iterable are skipped until start is reached.
408 Afterward, elements are returned consecutively unless *step* is set higher than
409 one which results in items being skipped. If *stop* is ``None``, then iteration
410 continues until the iterator is exhausted, if at all; otherwise, it stops at the
411 specified position. Unlike regular slicing, :func:`islice` does not support
412 negative values for *start*, *stop*, or *step*. Can be used to extract related
413 fields from data where the internal structure has been flattened (for example, a
414 multi-line report may list a name field on every third line). Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000415
Raymond Hettinger30c73622010-12-01 23:45:20 +0000416 def islice(iterable, *args):
417 # islice('ABCDEFG', 2) --> A B
418 # islice('ABCDEFG', 2, 4) --> C D
419 # islice('ABCDEFG', 2, None) --> C D E F G
420 # islice('ABCDEFG', 0, None, 2) --> A C E G
421 s = slice(*args)
422 it = iter(range(s.start or 0, s.stop or sys.maxsize, s.step or 1))
423 nexti = next(it)
424 for i, element in enumerate(iterable):
425 if i == nexti:
426 yield element
427 nexti = next(it)
Georg Brandl116aa622007-08-15 14:28:22 +0000428
Raymond Hettinger30c73622010-12-01 23:45:20 +0000429 If *start* is ``None``, then iteration starts at zero. If *step* is ``None``,
430 then the step defaults to one.
Georg Brandl116aa622007-08-15 14:28:22 +0000431
Georg Brandl116aa622007-08-15 14:28:22 +0000432
Georg Brandl3dd33882009-06-01 17:35:27 +0000433.. function:: permutations(iterable, r=None)
Christian Heimes70e7ea22008-02-28 20:02:27 +0000434
Raymond Hettinger30c73622010-12-01 23:45:20 +0000435 Return successive *r* length permutations of elements in the *iterable*.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000436
Raymond Hettinger30c73622010-12-01 23:45:20 +0000437 If *r* is not specified or is ``None``, then *r* defaults to the length
438 of the *iterable* and all possible full-length permutations
439 are generated.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000440
Raymond Hettinger30c73622010-12-01 23:45:20 +0000441 Permutations are emitted in lexicographic sort order. So, if the
442 input *iterable* is sorted, the permutation tuples will be produced
443 in sorted order.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000444
Raymond Hettinger30c73622010-12-01 23:45:20 +0000445 Elements are treated as unique based on their position, not on their
446 value. So if the input elements are unique, there will be no repeat
447 values in each permutation.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000448
Raymond Hettinger30c73622010-12-01 23:45:20 +0000449 Equivalent to::
Christian Heimesb558a2e2008-03-02 22:46:37 +0000450
451 def permutations(iterable, r=None):
Raymond Hettingerdd1150e2008-03-13 02:39:40 +0000452 # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
453 # permutations(range(3)) --> 012 021 102 120 201 210
Christian Heimesb558a2e2008-03-02 22:46:37 +0000454 pool = tuple(iterable)
455 n = len(pool)
456 r = n if r is None else r
Raymond Hettinger5bad41e2009-01-08 21:01:54 +0000457 if r > n:
458 return
459 indices = list(range(n))
Sandro Tosi73866622011-12-25 17:25:45 +0100460 cycles = list(range(n, n-r, -1))
Christian Heimesb558a2e2008-03-02 22:46:37 +0000461 yield tuple(pool[i] for i in indices[:r])
462 while n:
463 for i in reversed(range(r)):
464 cycles[i] -= 1
465 if cycles[i] == 0:
466 indices[i:] = indices[i+1:] + indices[i:i+1]
467 cycles[i] = n - i
468 else:
469 j = cycles[i]
470 indices[i], indices[-j] = indices[-j], indices[i]
471 yield tuple(pool[i] for i in indices[:r])
472 break
473 else:
474 return
Christian Heimes70e7ea22008-02-28 20:02:27 +0000475
Raymond Hettinger30c73622010-12-01 23:45:20 +0000476 The code for :func:`permutations` can be also expressed as a subsequence of
477 :func:`product`, filtered to exclude entries with repeated elements (those
478 from the same position in the input pool)::
Christian Heimes78644762008-03-04 23:39:23 +0000479
480 def permutations(iterable, r=None):
481 pool = tuple(iterable)
482 n = len(pool)
483 r = n if r is None else r
484 for indices in product(range(n), repeat=r):
485 if len(set(indices)) == r:
486 yield tuple(pool[i] for i in indices)
487
Raymond Hettinger30c73622010-12-01 23:45:20 +0000488 The number of items returned is ``n! / (n-r)!`` when ``0 <= r <= n``
489 or zero when ``r > n``.
Christian Heimes70e7ea22008-02-28 20:02:27 +0000490
Georg Brandl3dd33882009-06-01 17:35:27 +0000491.. function:: product(*iterables, repeat=1)
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000492
Raymond Hettinger30c73622010-12-01 23:45:20 +0000493 Cartesian product of input iterables.
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000494
Raymond Hettinger30c73622010-12-01 23:45:20 +0000495 Equivalent to nested for-loops in a generator expression. For example,
496 ``product(A, B)`` returns the same as ``((x,y) for x in A for y in B)``.
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000497
Raymond Hettinger30c73622010-12-01 23:45:20 +0000498 The nested loops cycle like an odometer with the rightmost element advancing
499 on every iteration. This pattern creates a lexicographic ordering so that if
500 the input's iterables are sorted, the product tuples are emitted in sorted
501 order.
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000502
Raymond Hettinger30c73622010-12-01 23:45:20 +0000503 To compute the product of an iterable with itself, specify the number of
504 repetitions with the optional *repeat* keyword argument. For example,
505 ``product(A, repeat=4)`` means the same as ``product(A, A, A, A)``.
Christian Heimes9e7f1d22008-02-28 12:27:11 +0000506
Raymond Hettinger30c73622010-12-01 23:45:20 +0000507 This function is equivalent to the following code, except that the
508 actual implementation does not build up intermediate results in memory::
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000509
Raymond Hettinger30c73622010-12-01 23:45:20 +0000510 def product(*args, repeat=1):
511 # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
512 # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
513 pools = [tuple(pool) for pool in args] * repeat
514 result = [[]]
515 for pool in pools:
516 result = [x+[y] for x in result for y in pool]
517 for prod in result:
518 yield tuple(prod)
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000519
520
Raymond Hettingerd75ad442009-06-01 19:16:52 +0000521.. function:: repeat(object[, times])
Georg Brandl116aa622007-08-15 14:28:22 +0000522
Raymond Hettinger30c73622010-12-01 23:45:20 +0000523 Make an iterator that returns *object* over and over again. Runs indefinitely
524 unless the *times* argument is specified. Used as argument to :func:`map` for
525 invariant parameters to the called function. Also used with :func:`zip` to
526 create an invariant part of a tuple record. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000527
Raymond Hettinger30c73622010-12-01 23:45:20 +0000528 def repeat(object, times=None):
529 # repeat(10, 3) --> 10 10 10
530 if times is None:
531 while True:
532 yield object
533 else:
534 for i in range(times):
535 yield object
Georg Brandl116aa622007-08-15 14:28:22 +0000536
Raymond Hettingerfc3ba6b2012-02-01 09:07:40 -0800537 A common use for *repeat* is to supply a stream of constant values to *map*
538 or *zip*::
539
540 >>> list(map(pow, range(10), repeat(2)))
541 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Georg Brandl116aa622007-08-15 14:28:22 +0000542
543.. function:: starmap(function, iterable)
544
Raymond Hettinger30c73622010-12-01 23:45:20 +0000545 Make an iterator that computes the function using arguments obtained from
546 the iterable. Used instead of :func:`map` when argument parameters are already
547 grouped in tuples from a single iterable (the data has been "pre-zipped"). The
548 difference between :func:`map` and :func:`starmap` parallels the distinction
549 between ``function(a,b)`` and ``function(*c)``. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000550
Raymond Hettinger30c73622010-12-01 23:45:20 +0000551 def starmap(function, iterable):
552 # starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000
553 for args in iterable:
554 yield function(*args)
Christian Heimes679db4a2008-01-18 09:56:22 +0000555
Georg Brandl116aa622007-08-15 14:28:22 +0000556
557.. function:: takewhile(predicate, iterable)
558
Raymond Hettinger30c73622010-12-01 23:45:20 +0000559 Make an iterator that returns elements from the iterable as long as the
560 predicate is true. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000561
Raymond Hettinger30c73622010-12-01 23:45:20 +0000562 def takewhile(predicate, iterable):
563 # takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4
564 for x in iterable:
565 if predicate(x):
566 yield x
567 else:
568 break
Georg Brandl116aa622007-08-15 14:28:22 +0000569
570
Georg Brandl3dd33882009-06-01 17:35:27 +0000571.. function:: tee(iterable, n=2)
Georg Brandl116aa622007-08-15 14:28:22 +0000572
Raymond Hettinger30c73622010-12-01 23:45:20 +0000573 Return *n* independent iterators from a single iterable. Equivalent to::
Georg Brandl116aa622007-08-15 14:28:22 +0000574
Raymond Hettingercf984ce2009-02-18 20:56:51 +0000575 def tee(iterable, n=2):
576 it = iter(iterable)
577 deques = [collections.deque() for i in range(n)]
578 def gen(mydeque):
579 while True:
580 if not mydeque: # when the local deque is empty
581 newval = next(it) # fetch a new value and
582 for d in deques: # load it to all the deques
583 d.append(newval)
584 yield mydeque.popleft()
585 return tuple(gen(d) for d in deques)
Georg Brandl116aa622007-08-15 14:28:22 +0000586
Raymond Hettinger30c73622010-12-01 23:45:20 +0000587 Once :func:`tee` has made a split, the original *iterable* should not be
588 used anywhere else; otherwise, the *iterable* could get advanced without
589 the tee objects being informed.
Georg Brandl116aa622007-08-15 14:28:22 +0000590
Raymond Hettinger30c73622010-12-01 23:45:20 +0000591 This itertool may require significant auxiliary storage (depending on how
592 much temporary data needs to be stored). In general, if one iterator uses
593 most or all of the data before another iterator starts, it is faster to use
594 :func:`list` instead of :func:`tee`.
Georg Brandl116aa622007-08-15 14:28:22 +0000595
Georg Brandl116aa622007-08-15 14:28:22 +0000596
Georg Brandl3dd33882009-06-01 17:35:27 +0000597.. function:: zip_longest(*iterables, fillvalue=None)
Raymond Hettinger749761e2009-01-27 04:42:48 +0000598
Raymond Hettinger30c73622010-12-01 23:45:20 +0000599 Make an iterator that aggregates elements from each of the iterables. If the
600 iterables are of uneven length, missing values are filled-in with *fillvalue*.
601 Iteration continues until the longest iterable is exhausted. Equivalent to::
Raymond Hettinger749761e2009-01-27 04:42:48 +0000602
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700603 class ZipExhausted(Exception):
604 pass
605
606 def zip_longest(*args, **kwds):
Raymond Hettinger30c73622010-12-01 23:45:20 +0000607 # zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700608 fillvalue = kwds.get('fillvalue')
609 counter = len(args) - 1
610 def sentinel():
611 nonlocal counter
612 if not counter:
613 raise ZipExhausted
614 counter -= 1
615 yield fillvalue
Raymond Hettinger30c73622010-12-01 23:45:20 +0000616 fillers = repeat(fillvalue)
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700617 iterators = [chain(it, sentinel(), fillers) for it in args]
Raymond Hettinger30c73622010-12-01 23:45:20 +0000618 try:
Raymond Hettinger6f45d182011-10-30 15:06:14 -0700619 while iterators:
620 yield tuple(map(next, iterators))
621 except ZipExhausted:
Raymond Hettinger30c73622010-12-01 23:45:20 +0000622 pass
Raymond Hettinger749761e2009-01-27 04:42:48 +0000623
Raymond Hettinger30c73622010-12-01 23:45:20 +0000624 If one of the iterables is potentially infinite, then the :func:`zip_longest`
625 function should be wrapped with something that limits the number of calls
626 (for example :func:`islice` or :func:`takewhile`). If not specified,
627 *fillvalue* defaults to ``None``.
Raymond Hettinger749761e2009-01-27 04:42:48 +0000628
629
Georg Brandl116aa622007-08-15 14:28:22 +0000630.. _itertools-recipes:
631
Raymond Hettinger1fa76822010-12-06 23:31:36 +0000632Itertools Recipes
633-----------------
Georg Brandl116aa622007-08-15 14:28:22 +0000634
635This section shows recipes for creating an extended toolset using the existing
636itertools as building blocks.
637
638The extended tools offer the same high performance as the underlying toolset.
639The superior memory performance is kept by processing elements one at a time
640rather than bringing the whole iterable into memory all at once. Code volume is
641kept small by linking the tools together in a functional style which helps
642eliminate temporary variables. High speed is retained by preferring
Georg Brandl9afde1c2007-11-01 20:32:30 +0000643"vectorized" building blocks over the use of for-loops and :term:`generator`\s
Christian Heimesfe337bf2008-03-23 21:54:12 +0000644which incur interpreter overhead.
645
646.. testcode::
Georg Brandl116aa622007-08-15 14:28:22 +0000647
Raymond Hettinger30c73622010-12-01 23:45:20 +0000648 def take(n, iterable):
649 "Return first n items of the iterable as a list"
650 return list(islice(iterable, n))
Georg Brandl116aa622007-08-15 14:28:22 +0000651
Raymond Hettinger30c73622010-12-01 23:45:20 +0000652 def tabulate(function, start=0):
653 "Return function(0), function(1), ..."
654 return map(function, count(start))
Raymond Hettingerdd1150e2008-03-13 02:39:40 +0000655
Raymond Hettinger30c73622010-12-01 23:45:20 +0000656 def consume(iterator, n):
657 "Advance the iterator n-steps ahead. If n is none, consume entirely."
658 # Use functions that consume iterators at C speed.
659 if n is None:
660 # feed the entire iterator into a zero-length deque
661 collections.deque(iterator, maxlen=0)
662 else:
663 # advance to the empty slice starting at position n
664 next(islice(iterator, n, n), None)
Raymond Hettingerfa007962009-03-09 11:55:25 +0000665
Raymond Hettinger30c73622010-12-01 23:45:20 +0000666 def nth(iterable, n, default=None):
667 "Returns the nth item or a default value"
668 return next(islice(iterable, n, None), default)
Georg Brandl116aa622007-08-15 14:28:22 +0000669
Raymond Hettinger30c73622010-12-01 23:45:20 +0000670 def quantify(iterable, pred=bool):
671 "Count how many times the predicate is true"
672 return sum(map(pred, iterable))
Georg Brandl116aa622007-08-15 14:28:22 +0000673
Raymond Hettinger30c73622010-12-01 23:45:20 +0000674 def padnone(iterable):
675 """Returns the sequence elements and then returns None indefinitely.
Georg Brandl116aa622007-08-15 14:28:22 +0000676
Raymond Hettinger30c73622010-12-01 23:45:20 +0000677 Useful for emulating the behavior of the built-in map() function.
678 """
679 return chain(iterable, repeat(None))
Georg Brandl116aa622007-08-15 14:28:22 +0000680
Raymond Hettinger30c73622010-12-01 23:45:20 +0000681 def ncycles(iterable, n):
682 "Returns the sequence elements n times"
683 return chain.from_iterable(repeat(tuple(iterable), n))
Georg Brandl116aa622007-08-15 14:28:22 +0000684
Raymond Hettinger30c73622010-12-01 23:45:20 +0000685 def dotproduct(vec1, vec2):
686 return sum(map(operator.mul, vec1, vec2))
Georg Brandl116aa622007-08-15 14:28:22 +0000687
Raymond Hettinger30c73622010-12-01 23:45:20 +0000688 def flatten(listOfLists):
689 "Flatten one level of nesting"
690 return chain.from_iterable(listOfLists)
Georg Brandl116aa622007-08-15 14:28:22 +0000691
Raymond Hettinger30c73622010-12-01 23:45:20 +0000692 def repeatfunc(func, times=None, *args):
693 """Repeat calls to func with specified arguments.
Georg Brandl116aa622007-08-15 14:28:22 +0000694
Raymond Hettinger30c73622010-12-01 23:45:20 +0000695 Example: repeatfunc(random.random)
696 """
697 if times is None:
698 return starmap(func, repeat(args))
699 return starmap(func, repeat(args, times))
Georg Brandl116aa622007-08-15 14:28:22 +0000700
Raymond Hettinger30c73622010-12-01 23:45:20 +0000701 def pairwise(iterable):
702 "s -> (s0,s1), (s1,s2), (s2, s3), ..."
703 a, b = tee(iterable)
704 next(b, None)
705 return zip(a, b)
Georg Brandl116aa622007-08-15 14:28:22 +0000706
Raymond Hettinger30c73622010-12-01 23:45:20 +0000707 def grouper(n, iterable, fillvalue=None):
708 "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
709 args = [iter(iterable)] * n
710 return zip_longest(*args, fillvalue=fillvalue)
Georg Brandl116aa622007-08-15 14:28:22 +0000711
Raymond Hettinger30c73622010-12-01 23:45:20 +0000712 def roundrobin(*iterables):
713 "roundrobin('ABC', 'D', 'EF') --> A D E B F C"
714 # Recipe credited to George Sakkis
715 pending = len(iterables)
716 nexts = cycle(iter(it).__next__ for it in iterables)
717 while pending:
718 try:
719 for next in nexts:
720 yield next()
721 except StopIteration:
722 pending -= 1
723 nexts = cycle(islice(nexts, pending))
Georg Brandl116aa622007-08-15 14:28:22 +0000724
Raymond Hettinger30c73622010-12-01 23:45:20 +0000725 def partition(pred, iterable):
726 'Use a predicate to partition entries into false entries and true entries'
727 # partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9
728 t1, t2 = tee(iterable)
729 return filterfalse(pred, t1), filter(pred, t2)
Raymond Hettinger5ce0aa22010-12-01 10:49:19 +0000730
Raymond Hettinger30c73622010-12-01 23:45:20 +0000731 def powerset(iterable):
732 "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
733 s = list(iterable)
734 return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
Raymond Hettinger08d01ee2010-08-07 05:36:53 +0000735
Raymond Hettinger30c73622010-12-01 23:45:20 +0000736 def unique_everseen(iterable, key=None):
737 "List unique elements, preserving order. Remember all elements ever seen."
738 # unique_everseen('AAAABBBCCDAABBB') --> A B C D
739 # unique_everseen('ABBCcAD', str.lower) --> A B C D
740 seen = set()
741 seen_add = seen.add
742 if key is None:
743 for element in filterfalse(seen.__contains__, iterable):
744 seen_add(element)
745 yield element
746 else:
747 for element in iterable:
748 k = key(element)
749 if k not in seen:
750 seen_add(k)
751 yield element
Christian Heimes90c3d9b2008-02-23 13:18:03 +0000752
Raymond Hettinger30c73622010-12-01 23:45:20 +0000753 def unique_justseen(iterable, key=None):
754 "List unique elements, preserving order. Remember only the element just seen."
755 # unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
756 # unique_justseen('ABBCcAD', str.lower) --> A B C A D
757 return map(next, map(itemgetter(1), groupby(iterable, key)))
Raymond Hettingerad9d96b2009-01-02 21:39:07 +0000758
Raymond Hettinger30c73622010-12-01 23:45:20 +0000759 def iter_except(func, exception, first=None):
760 """ Call a function repeatedly until an exception is raised.
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000761
Raymond Hettinger30c73622010-12-01 23:45:20 +0000762 Converts a call-until-exception interface to an iterator interface.
763 Like __builtin__.iter(func, sentinel) but uses an exception instead
764 of a sentinel to end the loop.
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000765
Raymond Hettinger30c73622010-12-01 23:45:20 +0000766 Examples:
767 iter_except(functools.partial(heappop, h), IndexError) # priority queue iterator
768 iter_except(d.popitem, KeyError) # non-blocking dict iterator
769 iter_except(d.popleft, IndexError) # non-blocking deque iterator
770 iter_except(q.get_nowait, Queue.Empty) # loop over a producer Queue
771 iter_except(s.pop, KeyError) # non-blocking set iterator
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000772
Raymond Hettinger30c73622010-12-01 23:45:20 +0000773 """
774 try:
775 if first is not None:
776 yield first() # For database APIs needing an initial cast to db.first()
777 while 1:
778 yield func()
779 except exception:
780 pass
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000781
Raymond Hettinger30c73622010-12-01 23:45:20 +0000782 def random_product(*args, repeat=1):
783 "Random selection from itertools.product(*args, **kwds)"
784 pools = [tuple(pool) for pool in args] * repeat
785 return tuple(random.choice(pool) for pool in pools)
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000786
Raymond Hettinger30c73622010-12-01 23:45:20 +0000787 def random_permutation(iterable, r=None):
788 "Random selection from itertools.permutations(iterable, r)"
789 pool = tuple(iterable)
790 r = len(pool) if r is None else r
791 return tuple(random.sample(pool, r))
Raymond Hettinger063a4b62010-04-02 04:18:18 +0000792
Raymond Hettinger30c73622010-12-01 23:45:20 +0000793 def random_combination(iterable, r):
794 "Random selection from itertools.combinations(iterable, r)"
795 pool = tuple(iterable)
796 n = len(pool)
797 indices = sorted(random.sample(range(n), r))
798 return tuple(pool[i] for i in indices)
Raymond Hettinger063a4b62010-04-02 04:18:18 +0000799
Raymond Hettinger30c73622010-12-01 23:45:20 +0000800 def random_combination_with_replacement(iterable, r):
801 "Random selection from itertools.combinations_with_replacement(iterable, r)"
802 pool = tuple(iterable)
803 n = len(pool)
804 indices = sorted(random.randrange(n) for i in range(r))
805 return tuple(pool[i] for i in indices)
Raymond Hettinger063a4b62010-04-02 04:18:18 +0000806
Raymond Hettingerfc91aa22010-03-28 18:27:13 +0000807Note, many of the above recipes can be optimized by replacing global lookups
808with local variables defined as default values. For example, the
809*dotproduct* recipe can be written as::
810
Raymond Hettinger30c73622010-12-01 23:45:20 +0000811 def dotproduct(vec1, vec2, sum=sum, map=map, mul=operator.mul):
812 return sum(map(mul, vec1, vec2))