You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Codewars差集函数array_diff实现错误,求问题原因及解决方法

Codewars差集函数问题排查

错误原因

你的代码存在两处核心逻辑错误,分别对应两个失败的测试用例:

  • 第一处:空列表a的返回逻辑颠倒
    需求是返回a减去b的差集,当a本身为空时,无论b是什么内容,差集都应该是空列表。你代码中写的if a == []: return b完全不符合需求,这就是输入a = []、b = [1,2]时返回错误的直接原因。
  • 第二处:remove()方法仅能删除第一个匹配项
    Python列表的remove(x)方法只会删除列表中第一个出现的x,不会删除所有x的实例。你遍历b的每个元素时仅调用一次remove,当a中存在多个相同的待删除元素时就会有残留,这就是输入a = [1,2,2]、b = [2]时返回[1,2]的原因。

另外补充一个隐性问题:直接修改传入的参数a会改变原列表的内容,属于不必要的副作用,不符合函数纯运算的设计预期。

正确实现

推荐用列表推导式配合集合查询实现,既满足所有需求,查询效率也更高:

def array_diff(a, b):
    # 把b转成集合,in操作时间复杂度从O(n)降到O(1)
    exclude_set = set(b)
    # 遍历a保留所有不在排除集合中的元素,天然保留原有顺序
    return [item for item in a if item not in exclude_set]

实现说明

  • 自动兼容空输入场景:如果a为空,列表推导式直接返回空列表;如果b为空,所有a的元素都会被保留,完全符合需求
  • 自动删除所有匹配项:遍历a的所有元素做判断,只要是在b中出现过的元素都会被过滤,不会有残留
  • 不修改原输入列表:返回的是全新生成的列表,不会改变传入的a、b参数的原始值

内容的提问来源于stack exchange,提问作者Dương Duy Nhật Minh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:24:11