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