Re: List element manipulation
- To: mathgroup at smc.vnet.net
- Subject: [mg25496] Re: List element manipulation
- From: adam_smith at my-deja.com
- Date: Thu, 5 Oct 2000 23:50:16 -0400 (EDT)
- References: <8r19qf$hvt@smc.vnet.net> <R9UB5.94602$Zh6.213678@ralph.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
I thought that you might find this of interest. I decided to try a
different method using ReplacePart[]. As shown below it can run quite
a bit faster for large lists. IMHO It also seems a little clearer to
follow, although not as compact and elegant as MapAt[]. Note, the
timing differences are insignificant for vectors 2000 elements or less.
(I am running Version 4.0.1.0 under Windows NT SP5 I think on a 333 MHz
Pentium II with 196 MB memory)
In[30]:=
v = Table[n, {n, 1, 200000}];
In[41]:=
Timing[newv = MapAt[# - 1 &, v, -1];]
newv[[300]]
newv[[Length[newv]]]
Out[41]=
{0.37 Second, Null}
Out[42]=
300
Out[43]=
199999
In[44]:=
Timing[mynewv = ReplacePart[v, v[[Length[v]]] - 1, Length[v]];]
mynewv[[300]]
mynewv[[Length[mynewv]]]
Out[44]=
{0.01 Second, Null}
Out[45]=
300
Out[46]=
199999
In article <R9UB5.94602$Zh6.213678 at ralph.vnet.net>,
"Allan Hayes" <hay at haystack.demon.co.uk> wrote:
> Martin:
>
> MapAt[# - 1 &, {1, 2, 3}, -1]
>
> {1, 2, 2}
>
> Allan
> ---------------------
> Allan Hayes
> Mathematica Training and Consulting
> Leicester UK
> www.haystack.demon.co.uk
> hay at haystack.demon.co.uk
> Voice: +44 (0)116 271 4198
> Fax: +44 (0)870 164 0565
>
> "Martin Rommel" <Martin_Rommel at mac.com> wrote in message
> news:8r19qf$hvt at smc.vnet.net...
> > I want to decrement the last number in list. This ought to be easy,
but my
> > initial attempts did not bear fruits:
> >
> > In[40]:=
> > MapAt[Decrement, Range[116, 166, 8], -1]
> >
> > Decrement::"rvalue": "164 is not a variable with a value, so
its value
> > cannot be changed."
> >
> > Out[40]=
> > {116, 124, 132, 140, 148, 156, 164--}
> >
> > Do I need to use ReplacePart? That works but still gives me an
error!
> >
> > In[53]:=
> > Range[116, 166, 8] // ReplacePart[#, --Last[#], -1] &
> >
> > Set::"write": "Tag Last in Last[{116, 124, 132, 140, 148, 156,
164}]
> is
> > Protected."
> >
> > Out[53]=
> > {116, 124, 132, 140, 148, 156, 163}
> >
> > Different error here:
> >
> > In[51]:=
> > Range[116, 166, 8] // ReplacePart[#, --#[[-1]], -1] &
> >
> > Set::"setps": "{116, 124, 132, 140, 148, 156, 164} in
assignment of
> part
> > is not a symbol."
> >
> > Out[51]=
> > {116, 124, 132, 140, 148, 156, 163}
> >
> >
> > Anybody out there able to enlighten me?
> >
> > Thanks, Martin
> >
> >
> >
>
>
Sent via Deja.com http://www.deja.com/
Before you buy.