altering each member of a list that matches a certain pattern
- To: mathgroup at smc.vnet.net
- Subject: [mg126960] altering each member of a list that matches a certain pattern
- From: Jason Ebaugh <ebaughjason at gmail.com>
- Date: Wed, 20 Jun 2012 03:51:41 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
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
- Follow-Ups:
- Re: altering each member of a list that matches a certain pattern
- From: Adriano Pascoletti <adriano.pascoletti@uniud.it>
- Re: altering each member of a list that matches a certain pattern
- From: Bob Hanlon <hanlonr357@gmail.com>
- Re: altering each member of a list that matches a certain pattern