From a17e5e4f8d9d9b8e1932bda10a1ab5cf59290deb Mon Sep 17 00:00:00 2001 From: Bo Bayles Date: Mon, 14 May 2018 21:20:08 -0500 Subject: [PATCH] Add prepend recipe --- docs/api.rst | 1 + more_itertools/recipes.py | 15 +++++++++++++++ more_itertools/tests/test_recipes.py | 16 ++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/docs/api.rst b/docs/api.rst index 914e5bc..49459f3 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -110,6 +110,7 @@ These tools combine multiple iterables. .. autofunction:: dotproduct .. autofunction:: flatten .. autofunction:: roundrobin +.. autofunction:: prepend Summarizing diff --git a/more_itertools/recipes.py b/more_itertools/recipes.py index ec5e756..3a7706c 100644 --- a/more_itertools/recipes.py +++ b/more_itertools/recipes.py @@ -33,6 +33,7 @@ __all__ = [ 'pairwise', 'partition', 'powerset', + 'prepend', 'quantify', 'random_combination_with_replacement', 'random_combination', @@ -548,3 +549,17 @@ def nth_combination(iterable, r, index): result.append(pool[-1 - n]) return tuple(result) + + +def prepend(value, iterator): + """Yield *value*, followed by the elements in *iterator*. + + >>> value = '0' + >>> iterator = ['1', '2', '3'] + >>> list(prepend(value, iterator)) + ['0', '1', '2', '3'] + + To prepend multiple values, see :func:`itertools.chain`. + + """ + return chain([value], iterator) diff --git a/more_itertools/tests/test_recipes.py b/more_itertools/tests/test_recipes.py index f6d7680..81721fd 100644 --- a/more_itertools/tests/test_recipes.py +++ b/more_itertools/tests/test_recipes.py @@ -589,3 +589,19 @@ class NthCombinationTests(TestCase): actual = mi.nth_combination(range(180), 4, 2000000) expected = (2, 12, 35, 126) self.assertEqual(actual, expected) + + +class PrependTests(TestCase): + def test_basic(self): + value = 'a' + iterator = iter('bcdefg') + actual = list(mi.prepend(value, iterator)) + expected = list('abcdefg') + self.assertEqual(actual, expected) + + def test_multiple(self): + value = 'ab' + iterator = iter('cdefg') + actual = tuple(mi.prepend(value, iterator)) + expected = ('ab',) + tuple('cdefg') + self.assertEqual(actual, expected) -- 2.39.0.windows.2