迭代nester元组以生成特定的字符串

时间:2016-03-04 23:23:38

标签: python string tuples

嗨,我有一个这样的数学方程式: " 1 +((( - -C24 + -A2)^ 2)*(B2 - F4)"我在转换为前缀表示法时将其转换为嵌套元组:

lis = ('add', '1', ('multiply', ('exp', ('add', '-C24', '-A2'), '2'), ('subtract', 'B2', 'F4')))

我想将其转换为如下所示的字符串:

add(1, multiply(exp(add(-C24, -A2), 2), subtract(B2, F4)))

但是,我的输出看起来像这样,显然不正确,因为我缺少一些逗号和括号:

add(1, multiply(exp(add(-C24, -A2)2)subtract(B2, F4)

我不确定我是否编程循环以正确迭代嵌套元组以将其转换为字符串:

    def solve(lis):
        count1 = 0;
        for element in lis:
            if isinstance(element, collections.Iterable) and not isinstance(element,str):
                for x in solve(element):
                    yield x
            else:
                if count1 == 0:
                    str1 = str(element)
                    str1 +="("
                    yield str1 
                elif count1 == 2:
                    str1 = str(element)
                    str1 +=")"
                    yield str1 
                else:
                    str1 = str(element)
                    str1 += ", "
                    yield str1 
                #yield str(element)
                print("element =", element, "count = ", count1)
            count1 = count1+1

print(''.join(list(solve(lis))))

非常感谢任何帮助,弄清楚我在哪里搞乱生成正确的字符串。

1 个答案:

答案 0 :(得分:0)

问题在于,当你到达一个可迭代的元素时,你就不会把","或")"在它之后。这会修复它(注意在你的内部for循环中用粗体字写的if-else语句):

    def solve(lis):
        count1 = 0;
        for element in lis:
            if isinstance(element, collections.Iterable) and not isinstance(element,str):
                for x in solve(element):
                    yield x
                if count1 == 2:
                    yield ")"
                else:
                    yield ", "

            else:
                if count1 == 0:
                    str1 = str(element)
                    str1 +="("
                    yield str1 
                elif count1 == 2:
                    str1 = str(element)
                    str1 +=")"
                    yield str1 
                else:
                    str1 = str(element)
                    str1 += ", "
                    yield str1 
                #yield str(element)
                print("element =", element, "count = ", count1)
            count1 = count1+1

现在这将打印您想要的内容:

print(''.join(list(solve(lis))))

给你:

add(1, multiply(exp(add(-C24, -A2), 2), subtract(B2, F4)))

根据需要。