Re: Pattern matching in lists
- To: mathgroup at smc.vnet.net
- Subject: [mg116128] Re: Pattern matching in lists
- From: Achilleas Lazarides <achilleas.lazarides at gmx.com>
- Date: Thu, 3 Feb 2011 05:28:02 -0500 (EST)
If we define
lst = RandomInteger[{0, 10}, 100000];
str = ToString@FromDigits[lst];
One can simply partition the list and test:
StringMatchQ[str, ___ ~~ "1554367876" ~~ ___]
MemberQ[Partition[lst, Length@#, 1], #] &@
{1, 5, 5, 4, 3, 6, 7, 8, 7, 6}
It's slower though. This is faster
randomname = Compile[{{lst, _Integer, 1}, {sublst, _Integer, 1}},
MemberQ[Partition[lst, Length@sublst, 1], sublst]]
but still slower than doing it with strings.
Surely there is a faster way though.
On Feb2, 2011, at 12:07 PM, Harvey P. Dale wrote:
> MemberQ easily tests whether a single integer appears in a list
> of integers. Suppose, however, that I want to test not for a single
> integer but for two or more consecutive integers, e.g., to see whether
> {1,4,6} is a member of {1,3,2,6,5,1,4,6,3,9}. I can do this by
> converting both lists into strings and then using string-matching
> functions, but is there some way of doing it directly without that
> conversion?
>
> Thanks.
>
> Harvey
>
> Harvey P. Dale
> University Professor of Philanthropy and the Law
> Director, National Center on Philanthropy and the Law
> 139 MacDougal Street
> New York, N.Y. 10012-1076
> Tel: 212-998-6161
> Fax: 212-995-3149
> =09
>
> ______________________________________________________________________
> This email has been scanned by the MessageLabs Email Security System.
> For more information please visit http://www.messagelabs.com/email
> ______________________________________________________________________
>