2014-01-13 50 views
0

假設我們有一個看起來像這樣的列表:清除從子列表的所有任意列出的所有元素在Python

L = [0, 1, [2, [3, 4], 5], [6, 7]] 

什麼將清除所有從每個子列表中的元素,而無需去除子列表的最佳方式?例如,在這種情況下,返回值將是:

>>> clearsublists(L) 
[[[]], []] 

編輯:這樣做有使用靠不住的字符串的方法,如列表轉換爲字符串,並計算時代的符號「[」的多種方式, '('和'{'出現,但是如果你有一個deques列表,例如deque會顯示爲deque([]),那會搞砸的,這使得程序認爲實際上只有兩個子集。一個

回答

4

任意深度,使用遞歸:

def clearsublists(L): 
    return [clearsublists(l) for l in L if isinstance(l, list)] 
+0

當然應該想過遞歸的方法之前,我問的問題。感謝您的幫助! – user3002473

+0

絕對是最優雅的解決方案。 +1。 – ApproachingDarknessFish

2
def clear(L): 
    if not L: 
     return [] 
    else: 
     return [clear(i) for i in L if isinstance(i, list)] 

輸出:

>>> L = [0, 1, [2, [3, 4], 5], [6, 7]] 
>>> clear(L) 
[[[]], []] 
相關問題