从列表中生成唯一组合列表
Generate a list of unique combinations from a list
我想生成一个列表,其中包含从 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)
但这不是一个特别好的解决方案,而且它肯定存在一些严重的性能问题。这个问题有没有简单高效的解决方案?
pairs xs = [[x1, x2] | (x1:xs1) <- tails xs, x2 <- xs1]
...假设列表开始时是唯一的,否则您可以用 nub
组合它。
我想生成一个列表,其中包含从 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)
但这不是一个特别好的解决方案,而且它肯定存在一些严重的性能问题。这个问题有没有简单高效的解决方案?
pairs xs = [[x1, x2] | (x1:xs1) <- tails xs, x2 <- xs1]
...假设列表开始时是唯一的,否则您可以用 nub
组合它。