Re: Finding the Position of Elements in a List that
- To: mathgroup at smc.vnet.net
- Subject: [mg102186] Re: [mg102157] Finding the Position of Elements in a List that
- From: Leonid Shifrin <lshifr at gmail.com>
- Date: Sat, 1 Aug 2009 03:56:39 -0400 (EDT)
- References: <200907310953.FAA19267@smc.vnet.net>
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 > >