|
[Date Index]
[Thread Index]
[Author Index]
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
|