[pyar] [OT] - Checkeando parentesis balanceados.
Claudio Freire
klaussfreire en gmail.com
Vie Jun 18 14:15:11 ART 2010
2010/6/18 Alejandro Santos <listas en alejolp.com>
> 2010/6/18 Juanjo Conti <jjconti en gmail.com>:
> > Si, la forma clasica es con una pila. Vas leyendo los tokens de a uno:
> >
> > Si es (: lo metes en la pila
> > Si es ): sacas uno de la pila
> >
> > Si el segundo paso da error por que no hay nada en la pila, entonces
> estån
> > desbalanceados.
> >
> > Era asi? Trate de recordarlo rapido.
> >
>
> Sip, y por ultimo verificar que la pila este vacia.
>
Versión con numpy:
>>> import numpy
>>>
>>> lines = [
... "(hola(chau))",
... "((",
... "()",
... "()()()",
... "((()(())()))",
... "((()(())())))",
... "(((()(())()))",
... ]
>>>
>>> for line in lines:
... if line:
... nline = numpy.ndarray((len(line),), dtype=numpy.uint8,
buffer=line)
... nline = numpy.add.accumulate(nline == ord('(')) -
numpy.add.accumulate(nline == ord(')'))
... if numpy.any(nline < 0):
... print "Parentesis desbalanceados en", line,
... print "parentesis extra en posicion", numpy.min((nline <
0).nonzero()) + 1
... elif nline[-1] > 0:
... print "Parentesis desbalanceados en", line,
... print "faltan cerrar", nline[-1], "parentesis"
...
Parentesis desbalanceados en (( faltan cerrar 2 parentesis
Parentesis desbalanceados en ((()(())()))) parentesis extra en posicion 13
Parentesis desbalanceados en (((()(())())) faltan cerrar 1 parentesis
>>>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20100618/16a4bc31/attachment.html>
More information about the pyar
mailing list