列表理解列表中的元组列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列表理解列表中的元组列表相关的知识,希望对你有一定的参考价值。

Haskell中是否有任何函数或方法可以帮助我获取元组列表,例如[(1,2),(3,4),(5,6)]和 返回[1,2,3,4,5,6]并使用列表理解?

我专门搜索一个参数xs和 在身体(功能)中有一个列表理解。

答案

鉴于元组列表名为ts,我们可以执行两次迭代:

[ t | (a, b) <- ts, t <- [a, b] ]

所以在这里我们首先迭代(a, b)中的元组ts,然后我们构建一个新的列表[a, b],我们也迭代该列表,并且我们为t中的每个t产生[a, b]

或者使用无点列表monad:

(>>= uncurry ((. pure) . (:)))
另一答案

当然,您可以处理任何列表,甚至是列表理解中的元组列表。这是不同的形式。在此之前,你会看到两个很好的答案,形式是(a,b)或(x,y)。这两者意味着相同。它们意味着元组中的两个元素。处理元组表单的问题是输出是单独的两个项目列表。这就是concat如此珍贵的原因。

我非常喜欢列表推导,并且上面给出了用列表理解来展平任何类型列表的经典形式。

我对Haskell相对较新,并且无法理解folds如何生成列表而不是像sumproduct这样的单个值。

这样的问题非常宝贵,因为它们有助于我理解。

这个foldr版本会产生一个列表。你想要的清单。为什么它是一个列表而不是单个值?这是因为foldr产生了一系列连续越来越大的列表,其中最后一个是答案。

这是一个foldr版本的函数来展平元组列表。

foldr ((a,b) l-> a:b:l) []    [(1,2),(3,4),(5,6)]

[1,2,3,4,5,6]

另一答案
concatMap ((x, y) -> [x, y]) [(1,2),(3,4),(5,6)]

会给

[1,2,3,4,5,6]

如果您不想使用concatMap,您可以这样做

concat . map ((x, y) -> [x, y])

以上是关于列表理解列表中的元组列表的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试插入由列表理解生成的元组列表时,executemany 抛出错误;如果它是硬编码的,则相同的列表有效

遍历 pandas 数据框中的行并匹配列表中的元组并创建一个新的 df 列

在与整数配对的所有数字列表中的元组内创建一个列表[重复]

如何将列表(元组内)中的元组转换为列表?

Python - 验证列表中的元组具有相同的长度

如何比较和搜索列表中的元素与列表 SML 中的元组