# # Copyright (C) 2004 Rational Discovery LLC # All Rights Reserved # """ utility functions for lists """ def CompactListRepr(lst): """ >>> CompactListRepr([0,1,1,1,1,0]) '[0]+[1]*4+[0]' >>> CompactListRepr([0,1,1,2,1,1]) '[0]+[1]*2+[2]+[1]*2' >>> CompactListRepr([]) '[]' >>> CompactListRepr((0,1,1,1,1)) '[0]+[1]*4' >>> CompactListRepr('foo') "['f']+['o']*2" """ if not len(lst): return '[]' components = [] last = lst[0] count = 1 i = 1 while(i < len(lst)): if lst[i] != last: label = '[%s]'%repr(last) if count > 1: label += '*%d'%count components.append(label) count = 1 last = lst[i] else: count += 1 i+=1 if count != 0: label = '[%s]'%repr(last) if count > 1: label += '*%d'%count components.append(label) return '+'.join(components) #------------------------------------ # # doctest boilerplate # def _test(): import doctest,sys return doctest.testmod(sys.modules["__main__"]) if __name__ == '__main__': import sys failed,tried = _test() sys.exit(failed)