如何仅从元组列表中获取我想要的元组? [哈斯克尔]

时间:2019-01-14 14:52:35

标签: haskell tuples list-comprehension

我正在尝试从Integer列表中以这种形式设置元组列表: (a,b)a <-[1..4]和b <-xs。但是我不断得到语句的所有不同组合。

okTup :: [Int] -> [(Int,Int)]
okTup xs = [(i,j) | i <- [1..4], j <- xs]

输入:okTup [3,1,4,2]

我得到的是: [(1,3),(1,1),(1,4),(1,2,2,(2,3),(2,1),(2,4),(2,2),( 3,3),(3,1),(3,4),(3,2),(4,3),(4,1),(4,4),(4,2)]

但是我只想要这个: [(1, 3 ),(2, 1 ),(3, 4 ),(4, 2 )]

1 个答案:

答案 0 :(得分:9)

zip

okTup xs = zip [1..] xs

如果您更喜欢使用列表理解,或者想扩展现有的理解,则可以使用ParallelListComp扩展名,它允许您编写:

okTup xs = [(i, j) | i <- [1..] | j <- xs]

(请注意,竖线|而不是逗号,。)

当然,这实际上只是在幕后使用zip