Re: extract from list and keep track
- To: mathgroup at smc.vnet.net
- Subject: [mg62171] Re: [mg62131] extract from list and keep track
- From: danl at wolfram.com
- Date: Sun, 13 Nov 2005 02:08:51 -0500 (EST)
- References: <200511120831.DAA19138@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
> I'm trying to write a program for the following. Seems simple, but I'm > unable to to do it: > > I have a list of increasing odd numbers. I want to create a table that > indicates which numbers in this list are 1(mod 8) and 7(mod 8) and what > position in the list these numbers have. > Then I would like to have them removed form the list to get a new > (reduced) > list. > > > Example: 3, 7, 9, 21, 43, 57, 63, 71, 75, 99. I want to form this a > Table: > > 2 7 > 3 9 > 6 57 > 7 63 > 8 71 > > 7 is 7(mod 8) and is the 2nd member in the list, 9 is 1(mod 8) and is the > 3rd member in the list, etc. > > The next list would become, having removed the ones in the table: > > 3, 21, 43, 75, 99 > > And I would be using some other congruence criteria. Etc. > > Thanks, > Andrea One approach is to sow elements into two separate lists, then reap the results. A small amount of code must then be expended to get to the desired level of the resulting lists. In[31]:= extractAnKeepRest[ll_List,cond_]:= Map[First,First[ Rest[Reap[MapIndexed[If[cond[#1],Sow[{#2[[1]],#1},1],Sow[#,2]]&,ll ],{1,2}]]]] In[9]:= cond[a_]:=Abs[Mod[a,8,-1]]===1 In[4]:= ll={3,7,9,21,43,57,63,71,75,99} In[32]:= {extracted,dregs}=extractAnKeepRest[ll,cond] Out[32]= {{{2,7},{3,9},{6,57},{7,63},{8,71}},{3,21,43,75,99}} Daniel Lichtblau Wolfram Research
- References:
- extract from list and keep track
- From: Andrea <andrea@radargift.com>
- extract from list and keep track