我有一个问题,我试图过滤(删除)一个列表中包含在另一个列表中的元素。两个列表都包含元组。我对如何做到这一点的想法如下:
map solutions.filter (\(x,y) -> (x,y) notElem) forced --Trying to remove elements from solutions that are also in forced.
如果这是一个愚蠢的问题,我很抱歉。我只是在学习haskell,并且仍在围绕列表过滤器进行思考。
编辑:我发现实际上,我试图删除强制列表中除(x,y)对之外的所有(x,*) and (*,y)
示例:强制= [(A,1)] 解= [(A,1),(A,2),(A,3),(B,1),(B,2),(B,3)] 我想要创建的是一个新列表,它删除所有的元组,其中1被分配给除A或A以外的任务而被分配给1以外的任务。 所以结果看起来像 [(A,1),(B,2),(B,3)]
答案 0 :(得分:2)
Data.List有the (\\)
operator:
import Data.List ((\\))
a = [5, 6, 7, 8, 2, 1, 4]
b = [7, 2, 4]
a \\ b -- [5, 6, 8, 1]
对于你的元组,我想你可以这样做:
[(a, b) | (a, b) <- solutions, not $ any (\(c, d) -> (a == c && b /= d) || (a /= c && b == d)) forced]