过滤掉列表列表中的元素

时间:2017-09-29 17:57:00

标签: haskell

我想过滤掉这个列表中的数字2:

myList = [[1,2,3],[1,2],[2,1,3,4]]

...所以当我使用这个长度函数时:

noTwos xs = map length [x|x<-xs]

我会得到结果[2,1,3]

我尝试使用[x|x<-xs, x/=[2] ],但只过滤了[2]列表中的列表,如何过滤掉所有子列表中的2?

2 个答案:

答案 0 :(得分:3)

这似乎工作正常:

map (filter (/= 2)) [[1,2,3],[1,2],[2,1,3,4]]

您可以在外部列表上进行映射,并过滤每个子列表。

答案 1 :(得分:0)

除了Ulrar的map . filter版本之外,它确实更具可读性。 使用List's difference (\\)也应该有效(导入 Data.List 是必需的):

no2s = map (\\ [2])

注意,这会在[...,[2],...]

的情况下留下空列表

如果您想要删除空列表,只需将其过滤掉:

no2s = filter (not . null) . map (\\ [2])