[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