2014-08-31 126 views
0

我有一個嵌套的列表,其中的元素是列表本身。我想找到的所有子列表和展平,然後一個單獨的列表:Python從嵌套列表中提取所有子列表

例如:

[[a], [b,[c,[d,e]]], [f,g]] 

我想有一個包含所有現有的子列表(扁平化),在原來的列表清單,那就是:

[[a], [b,c,d,e], [c,d,e], [d,e], [f,g]] 

我使用了遞歸函數,但問題是我再次嵌套子列表,這不是我想要的。另外我的問題不是關於flattening不規則列表。

+3

我不會把這個操作叫做「扁平化」......在你的輸出中元素'd'被複制兩次。那真的是你想要的嗎? – roippi 2014-08-31 18:45:20

+0

@roippi是的,這正是我想要的輸出,我希望所有子列表出現在單個列表中。 – CentAu 2014-08-31 18:47:34

+0

不,它沒有回答!這不是一個不規則的列表。如果您看到示例輸出,就會明白它不是扁平化的。 – CentAu 2014-08-31 18:54:32

回答

1

我們將使用返回嵌套列表的扁平形狀和所有子列表的輔助功能:

def flattened_list_and_sublists(l): 
    # First return value is l, flattened. 
    # Second return value is a list of flattened forms of all nested sublists 
    # of l. 

    flattened = [] 
    flattened_sublists = [] 

    for i in l: 
     if isinstance(i, list): 
      i_flattened, i_flattened_sublists = flattened_list_and_sublists(i) 
      flattened += i_flattened 
      flattened_sublists.append(i_flattened) 
      flattened_sublists += i_flattened_sublists 
     else: 
      flattened.append(i) 
    return flattened, flattened_sublists 

那麼你一定要回報上述功能的第二功能返回值:

def all_flattened_sublists(l): 
    l_flattened, l_sublists_flattened = flattened_list_and_sublists(l) 
    return l_sublists_flattened