list - F# 取一个列表,返回元组列表

标签 list f# tuples

我做了一些研究,我看到 List.zip 函数接受两个列表并返回一个元组列表,但是如何将一个列表更改为一个元组列表?

let rec combinePair xs =
    match xs with
    | [] -> []
    | [x1] -> []
    | x1::x2::x3::xs -> [(x1, x2)]
    | x1::x2::xs -> [(x1, x2)] 

如果列表中存在奇数个元素,则应删除最后一个元素,如果存在偶数个元素,则应将它们作为元组列表返回。例如
combinePair [x1; x2; x3; x4] = [(x1, x2); (x3, x4)]

最佳答案

你的代码就快到了。

思路如下:

  • 当给出一个空列表时,结果是一个空列表(你已经得到了)。
  • 当给定一个元素的列表时,结果是一个空列表(也得到了)。
  • 否则,结果的第一项是由前两个元素组成的元组,结果的其余部分是对输入的其余部分应用相同过程的结果。

  • 这几乎可以完全相同地转换为 F#:
    let rec combinePair xs =
        match xs with
        | [] | [_] -> []
        | x1::x2::rest -> (x1, x2) :: (combinePair rest)
    

    (注意我是如何将前两个案例组合在一行中的, [] | [_] -> )

    关于list - F# 取一个列表,返回元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42289225/

    相关文章:

    python - 查找元素是否在python列表中连续出现n次

    java - 如何修复 list.contains(object) 不返回好的 boolean 变量

    c# - 泛型构造要求类型 'Cell<' T>' 是非托管类型

    tuples - 如何在 Julia 的元组中展平命名元组?

    python - 根据条件在 Pandas 数据框中创建列

    python - 转换元组列表的大多数 pythonic 方法

    Ruby 排序和消除重复项

    list - 如何逆转Groovy集合的种类?

    parsing - fparsec OperatorPrecedenceParser : How to deal with incomplete parentheses

    f# - 无法在 F# 中扩展运算符?