将列表列表转换为元组列表的最佳方法是什么?

Vig*_*vam 5 erlang erlang-shell erlang-escript

将列表转换为[[1,2,3],[a,b,c],[4,5,6]]像这样的元组列表的最佳方法是什么:

[{1,a,4},{2,b,5},{3,c,6}]
Run Code Online (Sandbox Code Playgroud)

元组N由三个子列表中的每一个的第N个元素组成?我应该使用尾递归函数,列表推导还是其他方法?

Ste*_*ski 7

只需使用标准lists:zip3/3功能:

1> [L1,L2,L3] = [[1,2,3],[a,b,c],[4,5,6]].
[[1,2,3],[a,b,c],[4,5,6]]
2> lists:zip3(L1,L2,L3).
[{1,a,4},{2,b,5},{3,c,6}]
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望避免提取单个列表:

3> apply(lists, zip3, [[1,2,3],[a,b,c],[4,5,6]]).
[{1,a,4},{2,b,5},{3,c,6}]
Run Code Online (Sandbox Code Playgroud)


Hyn*_*dil 1

一种优雅的解决方案可以是

lol2lot([[]|_]) -> [];
lol2lot(LoL) ->
    [ list_to_tuple([hd(L) || L <- LoL]) | lol2lot([tl(L) || L <- LoL]) ].
Run Code Online (Sandbox Code Playgroud)