比较列表;返回唯一列表。Python

2024-10-16 20:39:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在这个函数中,返回一个已排序的项。例如,给定[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:])

我将函数修改为:

^{pr2}$

我使用基本的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语句链?在


Tags: 函数代码算法l1数据结构列表returnif
2条回答

Why do the first two if statements of returning the exhausted list give me the output [2,3,5]?

因为当其中一个列表中没有元素时,一个空列表和另一个列表的其余部分之间就没有什么共同之处了。在

Why does returning an empty list break out of the recursive function?

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

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

输出返回[2,3,5],因为上一个递归调用具有

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

因此,根据上述声明,唯一需要添加的元素将是两个列表的共同元素。
也可以将语句修改为:

^{pr2}$

相关问题 更多 >