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

如何使用列表推导式计算两个列表的对称差(symmetric difference)

实现方案

首先需要修正类型签名,因为我们要判断元素是否存在于另一个列表,需要用到相等判断,所以必须加Eq a约束。补全后的完整代码如下:

symDiff :: Eq a => [a] -> [a] -> [a]
symDiff xs ys = [x | x <- xs, x `notElem` ys] ++ [y | y <- ys, y `notElem` xs]

代码说明

  • 第一部分列表推导式[x | x <- xs, x notElem ys]筛选所有在xs中存在、但在ys中不存在的元素
  • 第二部分列表推导式[y | y <- ys, y notElem xs]筛选所有在ys中存在、但在xs中不存在的元素
  • 两部分结果用++拼接,就得到了两个列表的对称差

测试效果

运行示例symDiff [1,2,3,4] [1,3,5],输出结果为[2,4,5],完全符合要求。

如果输入列表存在重复元素,该实现会保留原列表的重复项,比如symDiff [2,2,3] [3]会返回[2,2],如果需要对结果去重,导入Data.List后用nub函数包裹最终结果即可。

内容的提问来源于stack exchange,提问作者Kilmix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:04