2012-10-19 60 views
1

可能重複:
Flatten (an irregular) list of lists in Python得到一個Python列表中的所有元素,包括子列表

我有一個Python列表,它的元素可以是字母或letters.I名單想寫提取所有元素的功能如下

假設

l=['a',['b',['c']] ] 

The output need to be ['a','b','c'] 

我認爲遞歸是正確的方法來做到這一點。 基本情況可能是該列表只包含一個元素。 我試圖代碼this..but輸出

['a', 'b', ['c']] 

有人能告訴我出了什麼錯在這裏?

def get_all_elements(mylist): 
    if len(mylist)==1: 
     return mylist[0] 
    else: 
     output=[mylist[0]] 
     output+=get_all_elements(mylist[1:]) 
     return output 
+0

它們總是單個字母嗎? – mgilson

+0

是任意嵌套的列表,還是最大3深? –

回答

1

這似乎是好工作:

def flatten(iterable): 
    out = [] 
    for i in iterable: 
     if hasattr(i,'__iter__'): 
     out.extend(flatten(i)) 
     else: 
     out.append(i) 
    return out 

l=['a',['b',['c']] ] 
print flatten(l) 

你在哪裏錯了是你的解決方案,mylist[0]本身可以(長度爲1)的一個列表,它包含另一個列表(任意長度的) 。在那種情況下,你只是返回它。

0

如果深度是任意的,我將不會認爲你能夠使用列表理解。

[grandchild for parent in l for child in parent for grandchild in child] 
相關問題