从列表中生成唯一组合的列表

时间:2015-05-13 22:01:55

标签: haskell combinations

我想生成一个列表,列出从Haskell中的数字列表中选择两个的所有独特方法。因此,从列表[1,2,3]我想[[1,2],[2,3],[1,3]]。订单并不重要,所以我想避免同时生成[1,2][2,1]

我目前的解决方案是:

pairs :: Ord a => [a] -> [[a]]
pairs x = nub $ map sort $ map (take 2) (permutations x)

然而,这并不是一个特别好的解决方案,它确实存在一些严重的性能问题。这个问题有一个简单而有效的解决方案吗?

1 个答案:

答案 0 :(得分:1)

pairs xs = [[x1, x2] | (x1:xs1) <- tails xs, x2 <- xs1]

...假设列表开始是唯一的,或者你可以用nub组合它。