Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

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

Search the Archive

Re: altering each member of a list that matches a certain pattern

  • To: mathgroup at smc.vnet.net
  • Subject: [mg126984] Re: altering each member of a list that matches a certain pattern
  • From: Vince Virgilio <blueschi at gmail.com>
  • Date: Fri, 22 Jun 2012 02:59:09 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jrrvjp$4sn$1@smc.vnet.net>

On Wednesday, June 20, 2012 3:54:33 AM UTC-4, Jason Ebaugh wrote:
> Good people,
> 
> 
> I need to alter each member of a list that matches a certain pattern.
> However, I need the whole list back, in its original order. 
> So Cases[] on its own doesn't do the trick.
> 
> Here is a toy example that is analogous to my real problem:
> Put an asterisk on each value that is 10 or greater in the following list.
> 
> list = RandomSample[Range[20], 20]
> 
> Out[1]= {19, 16, 5, 13, 10, 20, 1, 3, 18, 8, 9, 6, 12, 7, 4, 15, 11, 14, 2, 17}
> 
> I came up with two ways to do this.
> However, I feel like I may be missing a simpler, single function way to do this.
> 
> Method 1:
> If[# > 9, SuperStar[#], #] & /@ list
> 
> Out[2]= {SuperStar[19], SuperStar[16], 5, SuperStar[13], SuperStar[10], 
> SuperStar[20], 1, 3, SuperStar[18], 8, 9, 6, SuperStar[12], 7, 4, 
> SuperStar[15], SuperStar[11], SuperStar[14], 2, SuperStar[17]}
> 
> 
> Method 2:
> ReplacePart[list, 
>  Table[{Position[list, x_ /; x > 9][[i, 1]] -> 
>      Map[SuperStar, Cases[list, x_ /; x > 9]][[i]]}, {i, 
>     Length[Cases[list, x_ /; x > 9]]}] // Flatten]
> 
> Out[3]= {SuperStar[19], SuperStar[16], 5, SuperStar[13], SuperStar[10], 
> SuperStar[20], 1, 3, SuperStar[18], 8, 9, 6, SuperStar[12], 7, 4, 
> SuperStar[15], SuperStar[11], SuperStar[14], 2, SuperStar[17]}
> 
> 
> Am I missing a more straightforward way to do this?
> 
> 
> 
> Thanks,
> Jason
> 
> 
> Jason Ebaugh

There is also MapAt:


rs = RandomSample[Range[20], 20]; 
pos = Position[rs, _?(# > 9&)]; 
MapAt[SuperStar, rs, pos]




  • Prev by Date: Re: multiplying, element wise, a row by each column of a matrix.
  • Next by Date: Re: Mathematica freezes?
  • Previous by thread: Re: altering each member of a list that matches a certain pattern
  • Next by thread: Re: altering each member of a list that matches a certain pattern