List 删除lis中未出现在其他列表中的数字-Haskell

List 删除lis中未出现在其他列表中的数字-Haskell,list,haskell,compare,List,Haskell,Compare,我有两张号码表。每一个都是数字[1,2,3,4],但其中一个多了第五个数字,例如 list1 = [1,2,3,4] list2 = [1,2,3,4,5] 我需要通过从列表2中删除第5个数字或用列表1的另一个副本替换列表2来强制列表2与列表1相同 这能做到吗 这个问题的措辞有点奇怪。如果你想改变其中一个列表,那么答案是否定的:那是不可能的。否则,您当然可以在任何需要的地方使用list1而不是list2。Data.List提供了intersect方法,这似乎正是所请求的方法。执行list2的

我有两张号码表。每一个都是数字[1,2,3,4],但其中一个多了第五个数字,例如

list1 = [1,2,3,4]

list2 = [1,2,3,4,5]
我需要通过从列表2中删除第5个数字或用列表1的另一个副本替换列表2来强制列表2与列表1相同


这能做到吗

这个问题的措辞有点奇怪。如果你想改变其中一个列表,那么答案是否定的:那是不可能的。否则,您当然可以在任何需要的地方使用list1而不是list2。

Data.List提供了intersect方法,这似乎正是所请求的方法。

执行list2的最简单、最有效的方法是

[ x | x <- list1, x `elem` list2 ]
let list2 = list1 in .......

这甚至不要求列表元素具有可比性。

这里是另一个,尽管我最喜欢Louis_Wasserman的解决方案

filter (`elem` [1..4]) [1..12]
>>> [1,2,3,4]

如果列表二不相关,为什么首先要使用它?? 我想到了另一个:

const [1..4] list2
>>> [1,2,3,4]

最后一个只会忽略第二个列表并填充第一个列表。

如果出于某种原因您关心效率,而不关心保留顺序或重复项,那么您可以使用Data.Set.fromList和Data.Set.intersection为什么需要确保列表2与列表1相同?你就不能用列表1吗?我怀疑您的问题还有其他限制,我们需要了解这些限制以帮助您。
const [1..4] list2
>>> [1,2,3,4]