From 2ec5fd546f5fb98f84e3910301d53cfa30add15d Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 6 Mar 2016 18:06:29 -0800 Subject: [PATCH] Document another recipe for itertools: all_equal(). Inspired by David Beazley. --- Doc/library/itertools.rst | 5 +++++ Lib/test/test_itertools.py | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index ea279b0125..a48f69274a 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -695,6 +695,11 @@ which incur interpreter overhead. "Returns the nth item or a default value" return next(islice(iterable, n, None), default) + def all_equal(iterable): + "Returns True if all the elements are equal to each other" + g = groupby(iterable) + return next(g, True) and not next(g, False) + def quantify(iterable, pred=bool): "Count how many times the predicate is true" return sum(imap(pred, iterable)) diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index 753aa17afa..8b5f051f18 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -1525,6 +1525,11 @@ Samuele ... "Returns the nth item or a default value" ... return next(islice(iterable, n, None), default) +>>> def all_equal(iterable): +... "Returns True if all the elements are equal to each other" +... g = groupby(iterable) +... return next(g, True) and not next(g, False) + >>> def quantify(iterable, pred=bool): ... "Count how many times the predicate is true" ... return sum(imap(pred, iterable)) @@ -1623,6 +1628,9 @@ perform as purported. >>> nth('abcde', 9) is None True +>>> [all_equal(s) for s in ('', 'A', 'AAAA', 'AAAB', 'AAABA')] +[True, True, True, False, False] + >>> quantify(xrange(99), lambda x: x%2==0) 50 -- 2.50.1