Vilya Harvey: > from itertools import groupby > for x, g in groupby([fields[1] for fields in data]): > print x, len(tuple(g))
Avoid that len(tuple(g)), use something like the following, it's lazy and saves some memory. def leniter(iterator): """leniter(iterator): return the length of a given iterator, consuming it, without creating a list. Never use it with infinite iterators. >>> leniter() Traceback (most recent call last): ... TypeError: leniter() takes exactly 1 argument (0 given) >>> leniter([]) 0 >>> leniter([1]) 1 >>> leniter(iter([1])) 1 >>> leniter(x for x in xrange(100) if x%2) 50 >>> from itertools import groupby >>> [(leniter(g), h) for h,g in groupby("aaaabccaadeeee")] [(4, 'a'), (1, 'b'), (2, 'c'), (2, 'a'), (1, 'd'), (4, 'e')] >>> def foo0(): ... if False: yield 1 >>> leniter(foo0()) 0 >>> def foo1(): yield 1 >>> leniter(foo1()) 1 """ # This code is faster than: sum(1 for _ in iterator) if hasattr(iterator, "__len__"): return len(iterator) nelements = 0 for _ in iterator: nelements += 1 return nelements Bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list