【问题标题】:Comparing lists; returning unique list. - Python比较列表;返回唯一列表。 - Python
【发布时间】:2014-03-28 12:39:48
【问题描述】:

前言:这是我之前参加的数据结构和算法课程的考试。

问题:修改此函数,使其返回 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 语句是如何工作的。它们是我的基本情况。

标签: python list if-statement recursion unique


【解决方案1】:

为什么返回用尽列表的前两个 if 语句给我输出 [2,3,5]?

因为当其中一个列表中没有任何元素时,空列表与另一个列表的其余部分之间将没有任何共同点。

为什么返回一个空列表会中断递归函数?

return L1return L2 是递归的基本条件。一旦满足它们,我们就得到了一个确定的值(不是另一个级别的递归)。除非我们决定递归,否则一旦满足基本条件,递归将展开并返回结果。

【讨论】:

    【解决方案2】:

    你想找到两个列表的交集。因此,如果任一列表为空,则需要返回一个空列表,因为交集将为 []。

    输出返回 [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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      相关资源
      最近更新 更多