Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Finding the Position of Elements in a List that Contain

  • To: mathgroup at smc.vnet.net
  • Subject: [mg102195] Re: [mg102157] Finding the Position of Elements in a List that Contain
  • From: Gregory Lypny <gregory.lypny at videotron.ca>
  • Date: Sat, 1 Aug 2009 03:58:31 -0400 (EDT)
  • References: <200907310953.FAA19267@smc.vnet.net>

Thanks again Leonid,

I'll give this one a whirl.

	Gregory


On 31-Jul-09, at 10:16 AM, Leonid Shifrin wrote:

> Hi Gregory,
>
> just an amendment to my previous post:
>
> memberPositions[listOfStrings,
> Flatten@StringCases[listOfStrings, __ ~~ searchString ~~ ___]]
>
> (I was missing Flatten).
>
> Also, I have realized that there are easier ways, like this, for  
> example:
>
> Select[Transpose[{Range[Length[listOfStrings]],
>     StringCases[
>      listOfStrings, __ ~~
>       searchString ~~ ___]}], #[[2]] =!= {} &][[All, 1]]
>
>
> Regarding your request to test for individual words - quite doable,  
> I just happen
> to have zero time at the moment, to do it carefully. In case if  no  
> other solution is suggested,I will post one on Monday.
>
> Regards,
> Leonid
>
>
>
> On Fri, Jul 31, 2009 at 4:13 PM, Gregory Lypny <gregory.lypny at videotron.ca 
> > wrote:
> 	Just what I needed.  Thank you, Leonid, and I will thumb through  
> your book.  One of the things I want to work on is a function that  
> finds a word (string that is space delimited on both sides or one  
> side if occurring at the beginning or end of a string).  It would  
> work something like
>
> 	If theSearchString is among the words of theTargetString then  
> return True
>
> This is a function that Runtime Revolution (a.k.a MetaCard and  
> originally HyperCard) has, and it is indispensible.
>
> 	Regards,
>
> 		Gregory
>
>
>
> On Fri, Jul 31, 2009, at 7:12 AM, Leonid Shifrin wrote:
>
>> Hi Gregory.
>>
>> Position[listOfStrings,x_/;StringMatchQ[x, __ ~~ searchString ~~  
>> ___]],
>>
>> if your list is not too large. If it is, and you want to speed it  
>> up, one quick
>> solution is to use StringCases (as you did) to produce the list of  
>> matches,
>> and then the <memberPositions> function that I developed in my book:
>>
>> http://www.mathprogramming-intro.org/book/node596.html
>>
>> ,see at the bottom of the page - you feed both the original list  
>> and the list of results to it, like this:
>>
>> memberPositions[listOfStrings,
>> StringCases[listOfStrings, __ ~~ searchString ~~ ___]]
>>
>> I expect this to be fast even for large lists of strings:  
>> StringCases is much faster when used on a whole list of strings  
>> rather than used separately on each string, and my function is also  
>> rather fast. I did not benchmark you problem though, so it is just  
>> my guess that this way will be faster than the first one above.
>>
>>
>> Hope this helps.
>>
>> Regards,
>> Leonid
>>
>>
>>
>>
>> On Fri, Jul 31, 2009 at 1:53 PM, Gregory Lypny <gregory.lypny at videotron.ca 
>> > wrote:
>> Hello everyone,
>>
>> Suppose I have a list of strings, say, sentences such as
>>
>>        listOfStrings = {"The cat is here.", "It's not here.",  "Not  
>> in the
>> catalogue,", "Where is the cat?"}
>>
>> and a string I want to search for
>>
>>        searchString = "cat"
>>
>> I can use StringCases to pick off the elements that contain the  
>> search
>> string
>>
>>        StringCases[listOfStrings, __ ~~ searchString ~~ ___]
>>
>>        {{"The cat is here."}, {}, {"Not in the catalogue,"},  
>> {"Where is the
>> cat?"}}
>>
>> But what if I just want to know the positions of the elements that  
>> are
>> hits?  In this case, it's
>>
>>        {1, 3, 4}
>>
>> If I use
>>
>>        Position[listOfStrings, ___ ~~ theString ~~ ___]
>>
>> I get
>>
>>        {}
>>
>> which is not what I expect.  Also how can I have my searchString
>> treated like it is a word so that 3 is not one of the hits?
>>
>> Any hints would be much appreciated.
>>
>>        Gregory
>>
>>
>
>


  • Prev by Date: Re: Finding the Position of Elements in a List that Contain
  • Next by Date: Re: Finding the Position of Elements in a List that
  • Previous by thread: Re: Finding the Position of Elements in a List that Contain
  • Next by thread: Re: bvdae error when using NDSolve for initial value problem