【问题标题】:How to make a tuple from two indices in a list of lists?如何从列表列表中的两个索引创建一个元组?
【发布时间】:2020-02-16 08:35:09
【问题描述】:

我目前有一个列表,其中包含其他列表。 [ [1, 2, 3]; [9, 8, 7];...]

我想从我存储在整个列表中的这 3 个元素列表之一中的两个索引创建一个元组列表。

我写过类似的东西

let makeTuple list = 
  let rec tuple list tuplesList = 
    match list with 
    | [] -> ()
    | h::t -> (tuple t ( (List.item 2 list, List.item 5 list)::tuplesList))

  tuple list []

当我运行这个函数时,它给我一个错误,指出索引超出范围。我尝试了其他选项,但我似乎无法理解其中任何一个。我是 F-sharp 的新手:-S。任何提示都会很棒。

【问题讨论】:

  • 不清楚你想实现什么,请至少提供一个输入输出的例子。
  • 看来你想要的可能是transpose,然后是drop 2take 1drop 2take 1,最后是zip

标签: list functional-programming f#


【解决方案1】:

您期望的输出不是 100% 明确的。但是这个版本至少会运行并返回一个元组列表,所以也许它接近你想要的。

let makeTuple list = 
  let rec tuple list tuplesList = 
    match list with 
    | [] -> tuplesList
    | h::t -> (tuple t ( (List.item 0 h, List.item 2 h)::tuplesList))

  tuple list []

let lst = [ [1; 2; 3]; [9; 8; 7]; [14; 15; 16]]

lst |> makeTuple

输出:

val makeTuple : list:'a list list -> ('a * 'a) list
val lst : int list list = [[1; 2; 3]; [9; 8; 7]; [14; 15; 16]]
val it : (int * int) list = [(14, 16); (9, 7); (1, 3)]

【讨论】:

    猜你喜欢
    • 2022-12-08
    • 2020-02-27
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多