簡體   English   中英

比較清單; 返回唯一列表。 - Python

[英]Comparing lists; returning unique list. - Python

前言:這是我之前在我的數據結構和算法類中進行的考試的WAS。

問題:修改此函數,以便返回L1和L2中項目的排序列表。 例如,給定[1,2,3,4,5],[0,2,3,5,8],函數應返回[2,3,5]。 該函數必須以某種方式使用遞歸。

    def merge(L1, L2):
        if L1 == []:
            return L2
        elif L2 == []:
            return L1
        elif L1[0] <= L2[0]:
            return L1[:1] + merge(L1[1:], L2)
        else:
            return L2[:1] + merge((L1, L2[1:])

我修改了函數:

    def merge(L1, L2): 
        if L1 == []:                
           return L1
        elif L2 == []:              
           return L2
        elif L1[0] < L2[0]:         #Push L1 forward
           return merge(L1[1:], L2)
        elif L1[0] > L2[0]:         #Push L2 forward
           return merge(L1, L2[1:])
        elif L1[0] == L2[0]:        #If same element, return element
           return L1[:1] + merge(L1[1:], L2[1:])

我使用基本的if語句向前推送​​列表,確保每個列表中的每個元素都相互檢查。 它來得晚了,我以前的代碼一直在返回[2,3,5,8],因為我最初有:

    if L1 == []:
       return L2
    elif L2 == []:
       return L1

當L1耗盡時,它將返回L2的其余部分。然后重新輸入代碼並意外地輸入:

   if L1 == []:
      return L1
   elif L2 == []:
      return L2

它奏效了! 輸出是[2,3,5],但對我來說沒有意義

我的問題是:

為什么返回耗盡列表的前兩個if語句給出輸出[2,3,5]?

為什么返回一個空列表會突破遞歸函數?

最后,如果我的列表在遞歸函數中耗盡,是否有辦法打破if語句鏈?

為什么返回耗盡列表的前兩個if語句給出輸出[2,3,5]?

因為當其中一個列表中沒有剩余元素時,空列表與其他列表的其余部分之間沒有任何共同之處。

為什么返回一個空列表會突破遞歸函數?

return L1return L2是遞歸的基本條件 一旦滿足它們,我們就得到了一個確定的值(而不是另一個遞歸級別)。 除非我們決定遞歸,否則一旦滿足基本條件,遞歸將展開並返回結果。

您想要找到兩個列表的交集。 因此,如果其中一個列表為空,則需要返回一個空列表,因為交集將為[]。

輸出返回[2,3,5],因為先前的遞歸調用具有

elif L1[0] == L2[0]:
    return L1[:1] + merge(L1[1:], L2[1:])

因此,從上面的陳述中,唯一要添加的元素將是兩個列表共有的元素。
該聲明也可以修改為:

return L1[0] + merge(L1[1:], L2[1:]) #add the common element and merge the remaining parts

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM