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: [mg102219] 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 04:03:25 -0400 (EDT)
  • References: <200907310953.FAA19267@smc.vnet.net>

	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: Eigenvalues of sparse arrays
  • Next by Date: Re: Finding the Position of Elements in a List that Contain
  • Previous by thread: Re: Finding the Position of Elements in a List that Contain
  • Next by thread: Re: Finding the Position of Elements in a List that Contain