例如,我有[1,2,3]
,我想获得[[1,2],[1,3],[2,3]]
。此外,在列表中,[1,2]
和[2,1]
被假定为相同,所以只需在结果中留一个,我还想添加一个条件,比如'子列表中元素的总和更小比4',结果应该是[[1,2]]。
任何人都知道如何解决这个问题?
答案 0 :(得分:2)
使用列表理解:
input = [1,2,3]
output = [ [x,y] | x <- input, y <- input, x < y, x + y < 4]
-- [[1,2]]
答案 1 :(得分:1)
这是一个适用于不同类型的函数:
import Math.Combinat.Sets (choose)
select :: Int -> ([a] -> Bool) -> [a] -> [[a]]
select k filtering list = filter filtering (choose k list)
示例:
>>> select 2 (\x -> sum x < 5) [1,2,3]
[[1,2],[1,3]]
>>> select 2 (not . elem "hello") ["hello", "how", "are", "you"]
[["how","are"],["how","you"],["are","you"]]