2

我有以下列表:

lis={{1, {2}}, {3, {4, 5, 6}}, {7, {8, 9}}, {10, {11}}};

我想得到这个:

lis2={{1, 2}, {3, 4}, {3, 5}, {3, 6}, {7, 8}, {7, 9}, {10, 11}};

我可以使用嵌套表并计算第二个嵌套列表的长度来实现:

Flatten[Table[Table[{lis[[kk, 1]], lis[[kk, 2, ii]]}, {ii, 1, Length[lis[[kk, 2]]]}], {kk, 1, Length[lis]}], 1]

它有效,但有更直接的方法吗?也许是 Map/Thread/Apply 的组合?

4

1 回答 1

3

单程:

ArrayFlatten[Distribute[#, List] & /@ lis, 1]

=> {{1, 2}, {3, 4}, {3, 5}, {3, 6}, {7, 8}, {7, 9}, {10, 11}}

编辑

或者

ArrayFlatten[Thread /@ lis, 1]

编辑 2

或者,稍微简单一点,正如Wizard 先生在评论中指出的那样:

Flatten[Thread /@ lis, 1]
于 2013-08-12T17:44:02.220 回答