将输出更改为元组 [python]

Changing outputs into tuple [python]

def a_function(n, a, b, c):
    if n == 1:
        print((a,b))
else:
    a_function(n-1, a, c, b)
    print((a,b))
    a_function(n-1, c, b, a)    

a_function(3, 1, 2, 3)

如何使函数 return 元组而不是上面的输出?

(类似于:((1, 2), (1, 3), (2, 3), (1, 2), (3, 1), (3, 2), (1, 2 )))

您可以 return 一个元组的元组,并在 return 从递归调用中继续连接它们。例子-

def a_function(n, a, b, c):
    if n == 1:
        return ((a,b),)
    else:
        x = a_function(n-1, a, c, b)
        return x + ((a,b),) + a_function(n-1, c, b, a)

演示 -

>>> def a_function(n, a, b, c):
...     if n == 1:
...         return ((a,b),)
...     else:
...         x = a_function(n-1, a, c, b)
...         return x + ((a,b),) + a_function(n-1, c, b, a)
...
...
>>> a_function(3, 1, 2, 3)
((1, 2), (1, 3), (2, 3), (1, 2), (3, 1), (3, 2), (1, 2))

您可以使用 yield:

def gx(n, a, b, c):
    if n == 1:
        yield a, b
    else:
        for sub in gx(n - 1, a, c, b):
            yield sub
        yield a, b
        for sub in gx(n - 1, c, b, a):
            yield sub

print tuple(gx(3, 1, 2, 3))

((1, 2), (1, 3), (2, 3), (1, 2), (3, 1), (3, 2), (1, 2))

尝试了另一种方法。

    lis=[]
    def a_function(n, a, b, c):
        if n == 1:
            lis.append((a,b))
        else:
            a_function(n-1, a, c, b)
            lis.append((a,b))
            a_function(n-1, c, b, a)

    a_function(3, 1, 2, 3)
    print tuple(lis)