def is_sorted(iterable, key=lambda x:x, reverse=False, expected_len=None): ' checks if an iterable is sorted (consumes the iterable) ' if reverse: gen = (key(a) >= key(b) for a,b in pairwise(iterable)) else: gen = (key(a) <= key(b) for a,b in pairwise(iterable)) # pairwise results in one fewer value if expected_len is not None: expected_len -= 1 return counted_all(gen, expected_len=expected_len)
def test_pairwise(self): l = xrange(3) self.assertEqual([(0,1), (1,2)], [x for x in pairwise(l)])