python - 递归函数 - 比较 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() 的情况下做到这一点?太感谢了
解决方案
这是一个替代答案。它以保持在练习规则内的肮脏技巧为代价减少了重复:
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
在您的代码中,您在再次调用相同的函数之前从列表中删除了第一个元素。当您使用递归时,这不是必需的,它以不同的方式处理它。在递归中,您通常不会就地修改序列,而是将一个小节传递给内部调用。对于那个内部调用,该小节是整个序列。
推荐阅读
- sql - 如何检查 BigQuery 的列表中是否有多个值
- terraform - 如何使用 terraform 导入/下载现有的 cloudflare 资源?
- reactjs - 在 CRA 中正确实现 robots.txt
- javascript - 从 JS 对象返回最大值
- android - Android 图标和单选按钮不遵循日/夜模式
- fortran - fortran coarray 图像访问无法正常工作?
- javascript - 确认输入后如何停止滚动
- python - 如何在 Python 中比较对象属性的值?
- javascript - 如何正确使用 JQuery 选项选择
- google-sheets - 如果 B 列中的内容不为空,如何返回 A 列中名称的最后一次出现