Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较python中的括号_Python_Python 2.7 - Fatal编程技术网

比较python中的括号

比较python中的括号,python,python-2.7,Python,Python 2.7,我需要比较字符串的开括号和闭括号是否相等。我用柜台做这个。但是我应该如何比较计数器变量的两个值呢 您可以使用一个小函数,该函数使用.count(): 因此: >>> def checkparen(inp): ... return inp.count('(') == inp.count(')') and inp.count('[') == inp.count(']') and inp.count('{') == inp.count('}') ... 或者,使用集合。计

我需要比较字符串的开括号和闭括号是否相等。我用柜台做这个。但是我应该如何比较计数器变量的两个值呢

您可以使用一个小函数,该函数使用
.count()

因此:

>>> def checkparen(inp):
...     return inp.count('(') == inp.count(')') and inp.count('[') == inp.count(']') and inp.count('{') == inp.count('}')
... 
或者,使用集合。计数器:

>>> checkparen('((()))')
True
>>> checkparen('((())')
False
>>> checkparen('[ [ { { ( ( ) ) } } ] ]')
True
>>> 

您可以使用一个使用
.count()
的小函数:

因此:

>>> def checkparen(inp):
...     return inp.count('(') == inp.count(')') and inp.count('[') == inp.count(']') and inp.count('{') == inp.count('}')
... 
或者,使用集合。计数器:

>>> checkparen('((()))')
True
>>> checkparen('((())')
False
>>> checkparen('[ [ { { ( ( ) ) } } ] ]')
True
>>> 

一般来说,当您尝试扩展到您链接的文章中描述的更大的问题时,您要查找的问题类别是上下文无关语法分析器。这是一个非常经典的问题

甚至被认为是对编译器理论和相关主题的介绍

简单的自顶向下解析器非常容易实现

像Early这样的图表解析器更难,但有150行实现可用

您还可以使用解析器生成器


任何其他方法在开始时看起来都不错,但这将是唯一可以扩展的策略。一般来说,当您尝试扩展到链接文章中描述的更大问题时,您要查找的问题类别是上下文无关语法分析器。这是一个非常经典的问题

甚至被认为是对编译器理论和相关主题的介绍

简单的自顶向下解析器非常容易实现

像Early这样的图表解析器更难,但有150行实现可用

您还可以使用解析器生成器


任何其他方法在开始时看起来都不错,但这将是唯一可以扩展的策略。我认为您可以使用一个列表来查看所有括号是否匹配,如下所示:

>>> def checkparen(inp):
...     counter = collections.Counter(inp)
...     symbols = {'{':'}','[':']','(':')'}
...     for symbol in symbols:
...             if counter[symbol] != counter[symbols[symbol]]:
...                     return False
...     return True
... 
>>> checkparen('{')
False
>>> checkparen('[ [ { { ( ( ) ) } } ] ]')
True
>>> 

首先将一个字符放入堆栈中,然后弹出一个字符,查看它们是否匹配,最后也查看堆栈是否为空。

我认为您可以使用一个列表来查看所有括号是否匹配,如下所示:

>>> def checkparen(inp):
...     counter = collections.Counter(inp)
...     symbols = {'{':'}','[':']','(':')'}
...     for symbol in symbols:
...             if counter[symbol] != counter[symbols[symbol]]:
...                     return False
...     return True
... 
>>> checkparen('{')
False
>>> checkparen('[ [ { { ( ( ) ) } } ] ]')
True
>>> 

首先将一个字符推入堆栈,然后弹出一个字符,看看它们是否匹配,最后也看看堆栈是否为空。

括号是否总是按顺序打开然后关闭,即它不会进入“()()”?@en_Knight我正试图解决这个问题(),是的,它也会进入“()()”。哦,好的。使用正则表达式!(只是开玩笑,请不要伤害我)@en\u Knight为什么我不能用计数器解决这个问题?你可以。我想AJ会告诉你怎么做的。但是如果你关注我发布的链接,他们会解释说(几乎,有时是数学上的)不可能解决这个问题,因为它是用计数器来缩放的。如果此问题是独立的,请将其排除。如果你在某个地方正在进行的项目中做这件事,那么反技术会让你陷入困境,括号总是按顺序打开然后关闭,也就是说,它不会去“()()”?@en_Knight我试图解决这个问题(),是的,它也会去“()()”。哦,好的。使用正则表达式!(只是开玩笑,请不要伤害我)@en\u Knight为什么我不能用计数器解决这个问题?你可以。我想AJ会告诉你怎么做的。但是如果你关注我发布的链接,他们会解释说(几乎,有时是数学上的)不可能解决这个问题,因为它是用计数器来缩放的。如果此问题是独立的,请将其排除。如果你把它作为正在进行的项目的一部分,那么计数器技术会让你陷入困境,但是当我有更多的符号时问题就会出现
[{{(())}]]
这不是太复杂了吗。使用
Counter
?这实际上被认为更像python,但我会尝试使用一个计数器:)但是当我有更多符号时问题就会出现
[[{(())}]]
这不是太复杂。使用
Counter
有什么方法可以做到这一点吗?这实际上被认为更像python,但我将尝试使用计数器:)