2016-09-24 30 views
0

我有這個遞歸函數有沒有一種方法可以讓我這個變量存儲沒有它越來越重

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不安全,那麼我可以通過另一種方式來做到這一點。

回答

3

您需要捕獲返回值和使用來構建你的答案:

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

0

聲明第二個參數,這將是每一個遞歸函數調用時:

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

相關問題