Ну, первая вторая попытка:
(Предупреждение Предупреждение ... "элегантность" - это совершенно субъективная концепция)
gBoth[lslave_, lmaster_, f_] :=
{Part[#, All, All, 1], Part[#, All, All, 2]} &@
GatherBy[Transpose[{lslave, lmaster}], f[#[[2]]] &]
lmaster = {1, 2, 3};
lslave = {a, b, c};
{lslave1, lmaster1} = gBoth[lslave, lmaster, OddQ]
Out
{{{a, c}, {b}}, {{1, 3}, {2}}}
Редактировать
Обратите внимание, что для запуска этого кода необходимо иметь
Dimensions[lslave][[1;;Length[Dimensions@lmaster]]] == Dimensions@lmaster
, но более глубокая внутренняя структура обоих списков может отличаться.Например:
lmaster = {{1, 2, 3}, {2, 3, 4}};
lslave = {{{a}, {b}, {c}}, {{a}, {b}, {c}}};
{lslave1, lmaster1} = gBoth[lslave, lmaster, #[[1]] < 3 &]
Out
{{{{{a}, {b}, {c}}, {{a}, {b}, {c}}}}, {{{1, 2, 3}, {2, 3, 4}}}}
HTH!