MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Cases and Nonatomic expression

  • To: mathgroup at smc.vnet.net
  • Subject: [mg56762] Re: [mg56718] Cases and Nonatomic expression
  • From: DrBob <drbob at bigfoot.com>
  • Date: Thu, 5 May 2005 06:02:26 -0400 (EDT)
  • References: <200505040434.AAA06285@smc.vnet.net>
  • Reply-to: drbob at bigfoot.com
  • Sender: owner-wri-mathgroup at wolfram.com

One of these should help:

k={{1,1,2,2,3},{1,2,2,2,3},{2,3,3,3,3},{5,2,2,2,1},{6,1,1,1,1},{6,1,1,1,1}};
Map[Rest, Split[Sort@k, #1[[1]] == #2[[1]] &], {2}]

{{{1,2,2,3},{2,2,2,3}},{{3,3,3,3}},{{2,2,2,1}},{{1,1,1,1},{1,1,1,1}}}

(Sort is unnecessary if you're sure k is already sorted.)

or

Last@Reap@Scan[Sow[Rest@#,First@#]&,k]

{{{1,2,2,3},{2,2,2,3}},{{3,3,3,3}},{{2,2,2,1}},{{1,1,1,1},{1,1,1,1}}}

or

lst=Last@Reap[Scan[Sow[Rest@#,First@#]&,k],_,List]

{{1,{{1,2,2,3},{2,2,2,3}}},{2,{{3,3,3,3}}},{5,{{2,2,2,
   1}}},{6,{{1,1,1,1},{1,1,1,1}}}}

Clear@g
Scan[(g[#[[1]]]=#[[2]])&,lst]
g/@Range@6

{{{1,2,2,3},{2,2,2,3}},{{3,3,3,3}},g[3],g[4],{{2,2,2,1}},{{1,1,1,1},{1,1,
     1,1}}}

or

Clear@g
g[_] = {};
lst=Last@Reap[Scan[Sow[Rest@#, First@#] &, k], _, List];
Scan[(g[#[[1]]] = #[[2]]) &, lst]
g /@ Range@6

{{{1, 2, 2, 3}, {2, 2, 2, 3}}, {{3, 3, 3, 3}}, {}, {}, {{2, 2,
    2, 1}}, {{1, 1, 1, 1}, {1, 1, 1, 1}}}

or:

Clear@g
g[_]={};
Scan[AppendTo[g@First@#,Rest@#]&,k];
g/@Range@6

{{{1,2,2,3},{2,2,2,3}},{{3,3,3,3}},{},{},{{2,2,2,1}},{{1,1,1,1},{1,1,1,1}}}

Bobby

On Wed, 4 May 2005 00:34:32 -0400 (EDT), Swati Shah <swatshah at gmail.com> wrote:

> Hi Everyone
>
> I have a list
> k = {{1,1,2,2,3}, {1,2,2,2,3}, {2,3,3,3,3}, {5,2,2,2,1}, {6,1,1,1,1},
> {6,1,1,1,1}}
>
> If the first element of the sublist is 1 I want to append the sublist to
> g1, if it starts with 2 then append g2 or starts with 6 then append to g6
>
> I used cases and did the following:
> m1 = Cases[k, {1, __}];
> m2 = Cases[k, {2, __}];
> m3 = Cases[k, {3, __}];
> m4 = Cases[k, {4, __}];
> m5 = Cases[k, {5, __}];
> m6 = Cases[k, {6, __}];
>
> However, instead of typing each one of these lines separately, it
> would be nice to use just a simple Map or something or a for loop (as
> I have more than 50 different start values)
>
> I tried the following 2 ways:
>
> a) using a for loopFor [i = 1, i < 7,
>   t = "g" <> ToString [i];
>   Print [t];
>   t = Cases [k, {i, __}];
>   Print [t]
>     i++]
>
> However outside the for loop the values of g1..g6 is empty.
>
> b) I tried using MAP (in the similar way as the for)
>
> But I get the following error:
> Append::normal: Nonatomic expression expected at position 1 in Append[g1,{1, \
> 168, 0.695873, 6.54462, 62.4578, 82.5056}]
>
>
> Any suggestions as to how I can get this working?
>
> Thanks in advance
>
> Swati
>
>
>
>



-- 
DrBob at bigfoot.com


  • Prev by Date: Re: Re: Reading from a file.
  • Next by Date: Re: how call a function by same name in 2 different contexts?
  • Previous by thread: Re: Cases and Nonatomic expression
  • Next by thread: Re: Cases and Nonatomic expression