Re: Conditional list indexing
- To: mathgroup at smc.vnet.net
- Subject: [mg95869] Re: [mg95855] Conditional list indexing
- From: "David Park" <djmpark at comcast.net>
- Date: Thu, 29 Jan 2009 05:51:35 -0500 (EST)
- References: <11575212.1233143165868.JavaMail.root@m02>
Check out MapIndexed.
a = Table[Prime[i], {i, 10}]
{2,3,5,7,11,13,17,19,23,29}
Here is MapIndexed with a generic function f.
MapIndexed[f, a]
{f[2, {1}], f[3, {2}], f[5, {3}], f[7, {4}], f[11, {5}], f[13, {6}],
f[17, {7}], f[19, {8}], f[23, {9}], f[29, {10}]}
We want f to be a function that will do the test on the first element, if it
passes return the first part of the second element, otherwise return a blank
Sequence. The blank Sequence must be unevaluated so it is not eliminated.
MapIndexed[If[#1 > 15, First[#2], Unevaluated@Sequence[]] &, a]
{7, 8, 9, 10}
Look up Sequence. Notice that:
If[x, y, Sequence[]] gives
If[x, y] not what we want,
but
If[x, y, Unevaluated@Sequence[]] works properly.
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/
From: daniele [mailto:danielelinaro at gmail.com]
Hello everybody,
I'd like to know how I can get the indices of the elements in a list
that satisfy a certain condition. Here's an example: suppose I have
the list
a = Table[Prime[i],{i,10}];
that contains {2,3,5,7,11,13,17,19,23,29}.
If I execute the command
b = Select[a,#>15&];
b will contain {17,19,23,29}. I'd like to find a way to obtain a third
list, say c, that will contain {7,8,9,10}, i.e. the indices of the
elements in list a that are greater than 15.
Thank you,
Daniele