2017-07-07 35 views
0

我有一個關於遞歸的問題。用遞歸展開任意嵌套列表

def f6(lst): 
result = [] 
if type(lst[0]) == list: 
    return f6(lst[0]) 
else: 
    result.append(lst[0]) 

    if lst[1]: 
     return f6(lst[1]) 

    else: 
     return result 

我想從多維列表輸入製作一維列表。 例如,當我把["baa",[4,True,[10, 5],[1,2,['moo']]],['chirp']] ,我想利用["baa",4,True,10, 5,1,2,'moo','chirp']

但它給了我在if lst[1]:

我不能用lst[1]爲真/假條件index out of range錯誤? 我感謝您的幫助。

回答

1

您沒有考慮列表中可以按任意順序包含任意數量的元素和嵌套列表的情況。您需要初始化一個results列表,然後在每個元素上運行一個循環,並檢查該元素是否是列表的一個實例(它比type(x) == list更乾淨),如果是,則進行遞歸調用並將results名單。否則,將該元素附加到results

def f6(lst): 
    result = [] 
    for i in lst: 
     if not isinstance(i, list): 
      result.append(i) 
     else: 
      result.extend(f6(i)) 

    return result 

f6(["baa",[4,True,[10, 5],[1,2,['moo']]],['chirp']])調用此產生:

['baa', 4, True, 10, 5, 1, 2, 'moo', 'chirp'] 
+0

非常感謝!明白我做錯了什麼。 –

+0

@WonKim如果這個答案有幫助,請考慮標記爲接受。它有助於社區。謝謝 :) –