tiissa wrote: > Steven Bethard wrote: >> (2) Does anyone see an easier/clearer/simpler[1] way of doing this? > > I'd personnally extract the parenthesis then zip the lists of indices. > In short: > > >>> def indices(mylist): > ... lopen=reduce(list.__add__, [[i]*s.count('(') for i,s in > enumerate(mylist)],[]) > ... lclose=reduce(list.__add__, [[i]*s.count(')') for i,s in > enumerate(mylist)],[]) > ... return zip(lopen,lclose) > ... > >>> indices(lst) > [(2, 2), (4, 7), (6, 7), (8, 9), (8, 10)] > >>> > > Before returning, you can check if the lists have same size and if the > '(' has lower or equal index than ')' in each of these couples. If not > you can raise the appropriate exception. > > Disclaimer: not tested further than example above (but confident).
Not tested but confident should be an oxymoron for a programmer. Some examples: lst: ['(', '(', ')', ')'] hettinger [(1, 2), (0, 3)] bethard [(1, 2), (0, 3)] tiissa [(0, 2), (1, 3)] oops (or am I just spoilt by the XML spec?) lst: ['(', ')(', ')'] hettinger [(0, 1), (1, 2)] bethard [(1, 1), (0, 2)] oops tiissa [(0, 1), (1, 2)] So far Raymond's solution is my favourite... Peter -- http://mail.python.org/mailman/listinfo/python-list