有没有一种简单的方法可以检查两个列表是否包含共同元素。
IE
set1 = [1,2,3,4]
set2 = [[1,5,7],[1,2,3,8]]
有没有一种方法可以潜在地隔离 set1 中的元素,但 set2 中的任何集合中都没有?最好的方法是将 set2 中的 x 数量的集合加在一起,以便有一个大集合(使用 concat)与 set1 进行比较,还是浪费时间?
非常感谢任何建议。
有没有一种简单的方法可以检查两个列表是否包含共同元素。
IE
set1 = [1,2,3,4]
set2 = [[1,5,7],[1,2,3,8]]
有没有一种方法可以潜在地隔离 set1 中的元素,但 set2 中的任何集合中都没有?最好的方法是将 set2 中的 x 数量的集合加在一起,以便有一个大集合(使用 concat)与 set1 进行比较,还是浪费时间?
非常感谢任何建议。
import Data.Set as Set
foldl (\x y -> Set.difference x (Set.fromList y)) (Set.fromList set1) set2
给出以下输出:
fromList [4]
并且总是会给 set1 中不在 set2 中的任何集合中的成员 - 这似乎是你的问题。
尝试
filter (`notElem` (concat set2)) set1
它将返回set1
不在任何列表中的所有元素的列表set2
。但是,我不知道它的空间复杂性。
您可以创建一组所有元素set2
并使用它来过滤set1
:
import Data.Set as Set
let s = foldl (flip Set.insert) Set.empty (join set2) in [e | e <- set1, e `notMember` s]