Как сделать кортеж из двух индексов в списке списков? - PullRequest
0 голосов
/ 19 октября 2019

В настоящее время у меня есть список, который содержит другие списки внутри. [[1, 2, 3];[9, 8, 7]; ...]

Я хотел бы создать список кортежей из двух индексов в одном из этих трех списков элементов, которые я сохранил внутри всего списка.

Я написал что-то вроде

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. Любые советы будут великолепны.

1 Ответ

0 голосов
/ 19 октября 2019

Не совсем понятно, какой результат вы ожидаете. Но эта ревизия по крайней мере запускается и возвращает список кортежей, так что, возможно, она близка к тому, что вы хотите.

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)]
...