8
$\begingroup$

Say a list is given as

list = {a, b, c, d, r, m, n};

Suppose I want to insert 2 and 3 at position 3 and 7, respectively.

Insert[list, 2, 3] puts 2 at position 3, but Insert[list, {{2, 3}, {3, 7}}] does nothing.

How is it possible?

$\endgroup$
6
$\begingroup$

Look what I found after spelunking:

GroupTheory`PermutationGroups`Private`FoldInsert[
 {a, b, c, d, r, m, n},
 {2, 3}, {3, 7}
 ]

{a, b, 2, c, d, r, 3, m, n}

Well, it is not entirely correct for it does not revert the order of insertion... =/

$\endgroup$
  • $\begingroup$ Wow! $\phantom{}$ $\endgroup$ – J. M. will be back soon Sep 27 '18 at 14:53
  • 1
    $\begingroup$ I wonder if this package has similar functions. $\endgroup$ – Αλέξανδρος Ζεγγ Sep 27 '18 at 15:16
  • $\begingroup$ @ΑλέξανδροςΖεγγ That package appears to be very new. Good to know! (... although I won't find it applicable to my own work...) $\endgroup$ – Henrik Schumacher Sep 27 '18 at 15:26
  • $\begingroup$ @HenrikSchumacher Yes, it is accompanied with a book published just about two months ago. $\endgroup$ – Αλέξανδρος Ζεγγ Sep 27 '18 at 16:20
7
$\begingroup$

How about this

myInsert[list_, valuePosList_] := Fold[Insert[#, Sequence @@ #2] &, 
                                       list, 
                                       SortBy[valuePosList, -Last[#] &]
                                      ]

myInsert[list, {{2, 3}, {3, 7}}]
{a, b, 2, c, d, r, m, 3, n}
$\endgroup$
3
$\begingroup$
insertList[list_, valuePosList_] := ReplacePart[
  list,
  Apply[
   Rule[#2, Sequence[#1, list[[#2]]]] &,
   valuePosList
   , {1}
   ]
  ]

Mathematica graphics

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.