Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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_Algorithm_Numpy_Itertools_Catalan - Fatal编程技术网

Python:遍历表达式上的平衡圆括号

Python:遍历表达式上的平衡圆括号,python,algorithm,numpy,itertools,catalan,Python,Algorithm,Numpy,Itertools,Catalan,我找到了一些代码: 我稍微修改了链接中的代码,我的代码(如上)输出: 对于此输出中的每个表达式,我希望遍历并打印平衡括号的所有可能组合 例如,对于第一个表达式,我们将得到: (a & b) & c & d & e ((a & b) & c) & d & e (a & (b & c)) & d & e ((a & b) & c & d) & e ((a & b)

我找到了一些代码:

我稍微修改了链接中的代码,我的代码(如上)输出:

对于此输出中的每个表达式,我希望遍历并打印平衡括号的所有可能组合

例如,对于第一个表达式,我们将得到:

(a & b) & c & d & e
((a & b) & c) & d & e
(a & (b & c)) & d & e
((a & b) & c & d) & e
((a & b) & (c & d)) & e
((a & b & c) & d) & e
(((a & b) & c) & d) & e
((a & (b & c)) & d) & e
...
我该如何做(同时将执行时间保持在最低限度)

奖励:删除/防止任何重复项


我看到有一个类似的问题,但问题/答案在输出表达式中不包含运算符。

我在这里使用了答案:

def括号内(exprs):
如果len(exprs)==1:
收益率表达式[0]
其他:
第一个表达式=[]
最后的exprs=列表(exprs)
而1
这将产生相当多的选项。。。你到底想完成什么?这很有可能。一旦完成,我打算删除具有重复真值表赋值的表达式。我想要一个列表,列出给定一组运算符和操作数的表达式的所有可能组合(在我的应用程序中,这些将替换为比较语句)。对于这样的操作,请使用列表。数组上的迭代比较慢;而且
numpy
不提供任何添加的字符串功能。布尔SAT是最初的NP完全问题
a & b & c & d & e
a & b & c & d | e
a & b & c | d & e
a & b & c | d | e
a & b | c & d & e
a & b | c & d | e
a & b | c | d & e
a & b | c | d | e
a | b & c & d & e
a | b & c & d | e
a | b & c | d & e
a | b & c | d | e
a | b | c & d & e
a | b | c & d | e
a | b | c | d & e
a | b | c | d | e
(a & b) & c & d & e
((a & b) & c) & d & e
(a & (b & c)) & d & e
((a & b) & c & d) & e
((a & b) & (c & d)) & e
((a & b & c) & d) & e
(((a & b) & c) & d) & e
((a & (b & c)) & d) & e
...
def parenthesized (exprs):
    if len(exprs) == 1:
        yield exprs[0]
    else:
        first_exprs = []
        last_exprs = list(exprs)
        while 1 < len(last_exprs):
            first_exprs.append(last_exprs.pop(0))
            for x in parenthesized(first_exprs):
                if 1 < len(first_exprs):
                    x = '(%s)' % x
                for y in parenthesized(last_exprs):
                    if 1 < len(last_exprs):
                        y = '(%s)' % y
                    yield '%s%s' % (x, y)

for x in parenthesized(['a', 'b', 'c', 'd']):
    print x