Re: selecting from lists
- To: mathgroup at smc.vnet.net
- Subject: [mg6132] Re: [mg6120] selecting from lists
- From: Allan Hayes <hay at haystack.demon.co.uk>
- Date: Sun, 23 Feb 1997 00:10:45 -0500
- Sender: owner-wri-mathgroup at wolfram.com
murray at math.umass.edu (Murray Eisenberg)
[mg6120] selecting from lists
writes
(1)
> given an arbitrary list v and a list b of the same length, whose
> entries are all Boolean (True or False), construct a function
> s[v, b] whose result is a list consisting only of those entries
of > v for which the corresponding entries in b are True.
> For example,
> v = {3, 82, 7, -12, 5};
> b = {False, True, True, False};
> s[v, b]
> {82, 7}
(2)
> construct a function firstnonzero that returns the index of the
> first nonzero entry in a list (or, more generally, the first
entry > in a list satisfying a given property).
Murray:
Here are some ideas:
Both functions , s and p, allow the first n qualifying entries to
be chosen. We can easily go further, in particular by allowing s and
p to pass level specifications.
(1)
s[v_,b_,n_:Infinity]:= Cases[Thread[{v,b}], {x_,True}:>x,1,n]
s[v,b]
{82, 7}
s[v,b,1]
{82}
(2)
p[v_, pattern_, n_:Infinity] := Position[v, pattern, 1, n]
p[{1,2,1,2,2,1}, 1]
{{1}, {3}, {6}}
p[{1,2,1,2,2,1}, 1, 2]
{{1}, {3}}
Allan Hayes
hay at haystack.demon.co.uk
http://www.haystack.demon.co.uk