删除未出现在另一个列表中的列表中的数字 - Haskell

时间:2012-02-16 22:03:01

标签: list haskell compare

我有两个数字列表。每个都是数字[1,2,3,4],但在一个数字中还有一个额外的第五个数字,例如。

list1 = [1,2,3,4]

list2 = [1,2,3,4,5]

我需要强制list2list1相同,删除list2中的第5个号码或将list2替换为list1的另一个副本}?

可以这样做吗?

5 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

执行list2的最简单,最高效的方式与list1相同

let list2 = list1 in .......

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

答案 3 :(得分:2)

[ x | x <- list1, x `elem` list2 ]

答案 4 :(得分:0)

这是另一个虽然我最喜欢Louis_Wasserman的解决方案

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

filter (flip elem [1..4]) [1..12]
>>> [1,2,3,4]
fliter (\x ->x `elem` [1..4]) [1..12]
>>> [1,2,3,4]

如果列表2无关紧要为什么你首先使用它? 我想到了另一个:

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

最后一个忽略第二个列表并填写第一个。