繁体   English   中英

如何将元组列表拆分为列表元组?

[英]How split list of tuples to tuple of lists?

我被要求以以下方式将元组列表拆分为具有2个列表的元组:

splitter ([{1,2},{3,4},{5,6}]). = {[1,3,5],[2,4,6]}

我尝试编写以下代码:

splitter([]) -> {[],[]};
splitter(L) ->(map (fun ({A, _}) -> A end, L))|(map (fun ({_, B}) -> B end, L)).

而且它无法编译,我得到的错误是:语法错误:'|'

问题出在哪儿?:

您缺少外部花括号。 另外,更换| by ,因为这是用来分隔元组成员的。

splitter([]) -> {[],[]};
splitter(L) -> {(map (fun ({A, _}) -> A end, L)),
                (map (fun ({_, B}) -> B end, L))
               }.

空列表子句是不必要的。 您也可以使用列表推导。

splitter(L) -> {[ X || {X, _} <- L], [X || {_, X} <- L]}.

您也可以使通用

splitter_n(L) ->
    list_to_tuple(transpose([tuple_to_list(X) || X <- L])).

transpose([]) -> [];
transpose([[]|_]) -> [];
transpose(L) ->
    [[hd(X) || X <- L] | transpose([tl(X) || X <- L])].

工作中

1> c(splitter).
{ok,splitter}
2> splitter:splitter_n([{1,2},{3,4},{5,6}]).
{[1,3,5],[2,4,6]}
3> splitter:splitter_n([{1,2,3},{4,5,6},{7,8,9}]).
{[1,4,7],[2,5,8],[3,6,9]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM