我想过滤掉这个列表中的数字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?
答案 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])