2014-07-23 60 views
-1

我的問題基本上是這樣的:創建一個遞歸函數,它將嵌套列表作爲 參數,並返回其最大和最小元素之間的最小差異的子列表。Python - 創建一個遞歸函數

例如:函數返回[1,2]輸入[1,199,59],[1,2],[3,8]]

我搜索谷歌和計算器,但我不能找到這個具體的例子。

我想得到的幫助是迭代。我想,使用遞歸,迭代每個子列表(可以儘可能多)。我用for循環實現了這一點,但我無法通過遞歸方法掌握迭代的想法。

到目前爲止,我有這個:

def sublist(mylist): 
    if len(mylist) == 0: 
     return [] 
    elif len(mylist) == 1: 
     return mylist 
    else: 
     a = (mylist[0][0]) - (mylist[0][-1]) 
     if a < sublist(mylist[1:]): 
      return mylist[0] 
sublist([[1,199,58],[1,2],[3,8]]) 

這部分(子列表(MYLIST [1:]))我知道顯然是錯誤的。我試圖將值a與mylist [1:]中的值進行比較。我希望在這裏提供很多建議。

更新時間:

def differences(mylist): 

    diff = max(mylist) - min(mylist) 

    return diff 


def sublist(nestedlist): 

    if len(nestedlist) == 1: 

     return nestedlist[0] 

    else: 

     if differences(nestedlist[0]) < differences(sublist(nestedlist[1:])): 

      return nestedlist[0] 

     else: 

      return sublist(nestedlist[1:]) 


print(sublist([[1,199,59],[1,2],[3,8]])) 
+3

'「我搜索谷歌和計算器,但我無法找到這個特定的例如。「等等......所以你可能不得不寫**代碼,而不是拼接在一起的互聯網示例?!人*做*那? –

+0

如果你可以迭代地做到這一點,你爲什麼要遞歸地做呢?也許精心製作一點點?或者顯示一些代碼? – qbit

+0

@JonathonReinhart是的,我不得不寫代碼,這是我到目前爲止,我自己的:def子表(MYLIST): 如果len(MYLIST)== 0: 回報[] ELIF LEN(MYLIST)= = 1: 返回MYLIST 否則: A =(MYLIST [0] [0]) - (MYLIST [0] [ - 1]) 如果一個<子列表(MYLIST [1:]): 返回 子列表([[1,199,58],[1,2],[3,8]]) 我的邏輯是比較a的值和我從另一個嵌套列表中獲得的值,然後返回它。但這顯然是非常錯誤的,任何建議。 – Zulfi

回答

0

我假設你想使用遞歸列表的第一級。所以,沒有給你的代碼100%,你必須做這樣的事情:

1)創建一個方法,例如diferences(list),計算列表的差異,並返回一個列表與參數列表和最小差異即differences([1,2])應該返回[1, [1,2]]。一旦把它叫做第一子列表即min = differences(mylist[0])

2)創建子表的方法是這樣的:

def sublist(initial_list): 

    # 1) call differences() method for the first sublist of the 'initial_list' 
    # 2) update 'min' with differences(initial_list[0])if differences(inilitial_list[0])[0] < min[0]; 
    # 3) call sublist() again now removing the sublist you checked before from the arguement 
    # 4) (the following should be at the start of your sublist() method) 

    if len(initial_list) = 1: 
     if differences(initial_list) < min: 
      return initial_list 
     else: return min[1] 

希望幫助

+0

非常感謝幫助,我終於得到了。很抱歉,很晚纔回復。我在這個問題上編輯了我的最終答案。 – Zulfi

+0

隨時投票/接受,如果這有助於你:) – qbit

+0

不幸的是,我不能,「投票需要15聲望」。 – Zulfi