Разложить набор на элементы?
Sep 07 2020
Учитывая список кортежей, в которых один элемент является набором:
{{{}, "a"}, {{1}, "a"}, {{2}, "a"}, {{3}, "a"}, {{1, 2},
"a"}, {{1, 3}, "a"}, {{2, 3}, "a"}, {{1, 2, 3}, "a"}}
Это функция, которая разлагает наборы на новые кортежи, повторяя другой элемент в кортеже, т.е.
{{{{}, "a"}}, {{{1}, "a"}}, {{{2}, "a"}}, {{{3}, "a"}}, {{{1},
"a"}, {{2}, "a"}}, {{{1}, "a"}, {{3}, "a"}}}
?
Ответы
6 kglr Sep 07 2020 at 20:00
lst = {{{}, "a"}, {{1}, "a"}, {{2}, "a"}, {{3}, "a"}, {{1, 2}, "a"},
{{1, 3}, "a"}, {{2, 3}, "a"}, {{1, 2, 3}, "a"}}
Thread[{List /@ # /. {} -> {{}}, #2}] & @@@ lst // Column
В качестве альтернативы,
Tuples[{List /@ # /. {} -> {{}}, {#2}}] & @@@ lst
тот же результат
5 C.E. Sep 07 2020 at 19:57
Я считаю, что это то, что вы хотите:
expr /. {
idxs_ : {__Integer},
el_
} :> ({{#}, el} & /@ idxs)
где exprтвое выражение.