转置列表清单 [英] transpose of a list of lists
本文介绍了转置列表清单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图做一个递归函数来获取列表列表的转置,从n x p
到p x n
.但是我做不到.我已经能够制作一个函数,将列表的3 x n
列表转置为n x 3
的列表:
I'm trying to make a recursive function to get the transpose of a list of lists, n x p
to p x n
. But i'm unable to do so. I've been able to make a function to transpose a 3 x n
list of lists to an n x 3
one:
let rec drop1 list=
[(match (List.nth list 0) with [] -> [] | a::b -> b);
(match (List.nth list 1) with [] -> [] | a::b -> b);
(match (List.nth list 2) with [] -> [] | a::b -> b);]
let rec transpose list=
if List.length (List.nth list 0) == 0 then []
else [(match (List.nth list 0) with [] -> 0 | a::b -> a);
(match (List.nth list 1) with [] -> 0 | a::b -> a);
(match (List.nth list 2) with [] -> 0 | a::b -> a)]
:: transpose (drop1 list)
但是我不能一概而论.我肯定在错误的方向上思考.这是可概括的吗?有更好的解决方案吗?请帮忙.
But I'm not able to generalize it. I'm surely thinking in the wrong direction. Is this generalizable? Is there a better solution? Please help.
推荐答案
let rec transpose list = match list with
| [] -> []
| [] :: xss -> transpose xss
| (x::xs) :: xss ->
(x :: List.map List.hd xss) :: transpose (xs :: List.map List.tl xss)
这篇关于转置列表清单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文