Re: Re: Pick function

*To*: mathgroup at smc.vnet.net*Subject*: [mg62953] Re: [mg62928] Re: [mg62906] Pick function*From*: "Oyvind Tafjord" <tafjord at wolfram.com>*Date*: Fri, 9 Dec 2005 05:10:34 -0500 (EST)*References*: <200512080504.AAA11713@smc.vnet.net> <200512080836.DAA18265@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

----- Original Message ----- From: "Andrzej Kozlowski" <akoz at mimuw.edu.pl> To: mathgroup at smc.vnet.net Subject: [mg62953] [mg62928] Re: [mg62906] Pick function > > On 8 Dec 2005, at 14:04, Zdenek Buk wrote: > >> Hi All, >> >> I have found a strange behavior of the "Pick" function. >> >> Testing data: >> ------------ >> In[1]:= >> l = {1, a -> b, x, c -> 1, d -> e + f, g + h} >> <snip> >> >> Try to use the Pick function: >> ---------------------------- >> >> In[4]:= >> sel1=Pick[l,l,_->_] >> >> Out[4]= >> {a->b,c->1,d->e+f,0} >> <snipped explanation> > > I am not completely sure whether this was entirely intended by the > designer's of Pick and whether it would not be better if Pick had an > option specifying the level at which the attempted matching should > take place, but in any case, it shows that you have to use it carefully. > > Andrzej Kozlowski > Hi, The explanation from Andrzej is correct, and I agree the behavior of Pick can be somewhat confusing at times. The key to remember is that the full nested structure of the selector (2nd) argument is used. Having a level specification in Pick is probably not a bad idea, although it's really intended for use with selectors that have the exact structure of the result you want. So you could do something like Pick[l, MatchQ[#, _ -> _] & /@ l] although that wouldn't be very efficient for this particular case. Oyvind Tafjord Wolfram Research

**References**:**Pick function***From:*Zdenek Buk <zdenek@buk.cz>

**Re: Pick function***From:*Andrzej Kozlowski <akoz@mimuw.edu.pl>