首页 > 解决方案 > 递归函数 - 比较 2 个列表,返回两个列表中都不存在的元素

问题描述

我必须做一个递归函数,比较两个列表并返回它们没有共同点的元素。

这是我到目前为止所拥有的:

def compare(list1, list2):
    if list2[0] in list1:
        list1.remove(list2[0])
        return compare(list1[1:], list2[1:])

    return list1  

#Example 
 >>>>compare([2, 3, 4, 5], [2, 3])
 [4, 5]

我可以比较列表的第一个元素 (list[0]) 是否相同,但是如果它们不在第一个位置,我无法比较元素...我尝试了很多选项,但我我是编程的初学者,并不真正知道如何去做。它必须是一个递归函数,我不能使用 FOR 或 WHILE。有什么方法可以在不使用 remove() 的情况下做到这一点?太感谢了

标签: python

解决方案


这是一个替代答案。它以保持在练习规则内的肮脏技巧为代价减少了重复:

def compare(a, b):
    if isinstance(b, list):
        # Let's cheat and change the meaning of the parameters.
        return compare(a, set(b)) + compare(b, set(a))
    else:
        result = []

        if a:
            if a[0] not in b:
                result.append(a[0])

            result.extend(compare(a[1:], b))

        return result

在您的代码中,您在再次调用相同的函数之前从列表中删除了第一个元素。当您使用递归时,这不是必需的,它以不同的方式处理它。在递归中,您通常不会就地修改序列,而是将一个小节传递给内部调用。对于那个内部调用,该小节是整个序列。


推荐阅读