有没有一种方法可以让我这个变量存储没有它越来越重

问题描述:

我有这个递归函数有没有一种方法可以让我这个变量存储没有它越来越重

def recursive_search(x): 
    y = [] 
    for i in x: 
     if (i == tuple(i)) or (i == list(i)) or i == set(i): 
      recursive_search(i) 
     else: 
      y.append(i) 
    print(y) 
print(recursive_search(("re",("cur",("sion",(" ",("foo",["bar",{"baz"}]))))))) 

打印出

['baz'] 
['bar'] 
['foo'] 
[' '] 
['sion'] 
['cur'] 
['re'] 
None 

当我设置“打印(Y)”到“回归y“只打印出”['re']“。如果使用全局y不安全,那么我可以通过另一种方式来做到这一点。

您需要捕获返回值和使用来构建你的答案:

def recursive_search(x): 
    y = [] 
    for i in x: 
     if type(i) in (tuple, list, set): 
      y.append(recursive_search(i)) 
     else: 
      y.append(i) 
    return y 

print(recursive_search(("re",("cur",("sion",(" ",("foo",["bar",{"baz"}]))))))) 
# ['re', ['cur', ['sion', [' ', ['foo', ['bar', ['baz']]]]]]] 

如果你需要比嵌套你可以做别的事情与返回的其他东西。

+1

我认为'Y + = recursive_search(I),因为我认为运算想要一个结果数组'可能更适合这是平坦的。 –

+0

完美合理......目前还不清楚OP想要什么结果。 – AChampion

声明第二个参数,这将是每一个递归函数调用时:

def recursive_search(x,y=None): 
    if y is None: 
     y = [] 
    for i in x: 
     if (i == tuple(i)) or (i == list(i)) or i == set(i): 
      recursive_search(i, y) 
     else: 
      y +=[i] 
    return y[:] 

y = recursive_search(("re",("cur",("sion",(" ",("foo",["bar",{"baz"}])))))) 
print(y) 
z = recursive_search(("a",("brown",("fox",("jumps ",("over",["foo",{"bar"}])))))) 
print(z) 

['re', 'cur', 'sion', ' ', 'foo', 'bar', 'baz'] 
['a', 'brown', 'fox', 'jumps ', 'over', 'foo', 'bar'] 
+1

您只能调用一次该功能。副作用持续多次调用。 – AChampion

+0

是的,你是对的。用可能的解决方法编辑。但可能不是最佳的。 – Jeon

+0

再次编辑。 – Jeon