2015-05-14 53 views
1

問題:寫一個遞歸函數,flattenList,其中flattenList([2, 9, [2, 1, 13, 2], 8, [2, 6]]),將返回一個列表[2, 9, 2, 1, 13, 2, 8, 2, 6]遞歸展開列表 - 爲什麼我的代碼不能返回我想要的內容?

我的代碼

def flattenList(lis): 
    a = [] 
    for i in lis: 
     if not isinstance(i, list): 
      a.append(i) 
     else: 
      flattenList(i) 
    return a 

print(flattenList([2, 9, [2, 1, 13, 2], 8, [2, 6]])) 

雖然所需的輸出是[2, 9, 2, 1, 13, 2, 8, 2, 6],我得到[2, 9, 8](數字沒有子列表)。

回答

0

您的遞歸調用不會將數據添加到結果列表中。所以這個:

flattenList(i) 

應該是:

a += flattenList(i) 
+0

我明白了。非常感謝你! –

+0

@VictorLoh如果我的答案解決了您的問題,請單擊其左側的複選標記以將其標記爲已接受。 – orlp

0

您需要新增a.extend(flattenList(i))。你目前對遞歸返回沒有任何幫助。

0

您可以進行功能的發電機和使用yield from語法python3:

def flattenList(lis): 
    for i in lis: 
     if not isinstance(i, list): 
      yield i 
     else: 
      yield from flattenList(i) 


print(list(flattenList([2, 9, [2, 1, 13, 2], 8, [2, 6]]))) 
[2, 9, 2, 1, 13, 2, 8, 2, 6] 
相關問題