2015-05-13 177 views
0

我仍然在學習舊的測試,並得到了這個遞歸的任務。遞歸函數和列表

編寫一個遞歸函數「cut」,它將一個列表和一個數字作爲參數,並回退一個包含列表中所有小於參數中給定數字的數字的列表。

例子:

>>> cut([1,5,2,8,7,4,0,9], 5) 

[1,5,2,4,0]

以下是我想出了和它不工作。我不知道如何使新的列表或如何做選擇,如果可能的刪除是<定的參數

def cut(lista, tal): 

    a = 0 
    if not lista: 
     return a 
     print a 
    if lista[0] <= tal: 
     a = a + lista[0] 

    cut(lista[1:], tal) 

的任何想法的數字?我需要基礎知識,而不是高級功能。我在這個一直盯着了一個多小時,現在越來越行不通:■

+0

*其效果不佳*更具體 - 什麼不起作用? –

+0

我不知道如何創建新列表或如何儘可能地刪除數字<給定參數 –

+0

爲什麼你想讓它遞歸?已經有'filter'和_list comprehensions_可以在一行代碼中完成。 – myaut

回答

1

其實,你接近,但你需要初始化a[]和遞歸結果串聯到a(什麼是從內cut返回)。另外,如果您想查看列表,請先print,然後return。否則,它無法訪問。

def cut(ls, n): 
    if not ls: # base 
     return [] 
    return (ls[:1] if ls[0] < n else []) + cut(ls[1:], n) # peeling + rest 

注意,在描述它的書面less than給定數,但你的例子包含equal結果了。如果需要,請將其更改爲ls[0] <= n

+0

非常感謝很多人,我想我現在開始獲得這個:) –