Re: interchanging elements in a list
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg2005] Re: [mg1993] interchanging elements in a list
- From: Richard Mercer <richard at seuss.math.wright.edu>
- Date: Thu, 14 Sep 1995 23:27:04 -0400
> Hi Group;
>
> Am I the only Mma user to wonder why the obvious list
> command Interchange is missing from Mma? It is easy
> enough to programm but why should we have to? Interchange
> is not a name used anywhere else in Mma (?), it is a
> natural list operation, it is important in Gaussian
> Elimination...
>
> Presumably,
>
> Interchange[list_List,n,m]
>
> should yield list with the nth and mth entries
> interchanged. Of course, Interchange might well be
> designed to handle other heads besides List and perhaps
> even have some level specs as options.
>
> Jack Goldberg Univ. of Michigan
I agree entirely.
Here are four possible implementations.
The first is fastest; the third is shortest and is a condensation of the more
natural second one; the fourth is intermediate in both length and speed.
Interchange[list_List,n_,m_]:=
ReplacePart[ReplacePart[list,list[[n]],m],list[[m]],n];
Interchange[list_List,n_,m_]:=
list /. {list[[m]]->list[[n]],list[[n]]->list[[m]]};
Interchange[list_List,n_,m_]:=
list /. {#1->#2,#2->#1}& @@ Part[list,{m,n}];
Interchange[list_List,n_,m_]:=
Part[list,Range[1,Length[list]] /. {m->n,n->m}];
Richard Mercer