Test if list contains another list

gauravatnet at gmail.com gauravatnet at gmail.com
Thu Sep 18 06:25:42 EDT 2008


On Sep 18, 3:24 pm, gauravat... at gmail.com wrote:
> On Sep 9, 9:09 pm, "J. Cliff Dyer" <j... at sdf.lonestar.org> wrote:
>
>
>
> > On Tue, 2008-09-09 at 10:49 +0200, Bruno Desthuilliers wrote:
> > > Matimus a écrit :
> > > > On Sep 8, 12:32 am, Bruno Desthuilliers
> > > > <bdesth.quelquech... at free.quelquepart.fr> wrote:
> > > (snip)
> > > >>  >>> set(a).issubset(set(b))
> > > >> True
>
> > > > Just to clarify, doing it using sets is not going to preserve order OR
> > > > number of elements that are the same.
>
> > > > That is:
>
> > > >>>> a = [1,1,2,3,4]
> > > >>>> b = [4,5,3,7,2,6,1]
> > > >>>> set(a).issubset(set(b))
> > > > True
>
> > > > This will return True if b contains at least on of each element found
> > > > in a. If the OP wanted to check that list `a` appeared in order
> > > > somewhere in list `b` then sets won't work.
>
> > > Indeed, and I should have mentionned this myself. Thanks for this reminder.
>
> > If preserving order is important, strings have many of the properties
> > you're looking for, but it might take some work to figure out a suitable
> > way to convert to a string.  The problem is easier if you know something
> > about the inputs.  If all inputs are known to be numbers between 0 and
> > 15, you can just do:
>
> > if ''.join(map(hex, a)) in ''.join(map(hex, b)):
> >     return True
>
> > Hmm... actually, with the '0x' prefix that hex() puts on numbers, I
> > think this works for arbitrary integers.
>
> > Cheers,
> > Cliff
>
> Hi,
>
> I looked inside this thread for my query which brought me the
> following google search result
> "Test if list contains another list - comp.lang.python | Google
> Groups"
>
> But then I was disappointed to see the question asked was not exactly
> right. Other programmers have already answered to the main question.
> But what if you actually have to find out if a list has all its
> element inside another list in the same order. For that I wrote the
> code and that's what I came up with.. let me know if there are any
> bugs in this code.
>
> #!C:\Python24
>
> def findAllMatchingList(mainList, subList):
>     resultIndex = []
>     globalIndex = 0
>     for i in range(len(mainList)):
>         if i < globalIndex:
>             continue
>         globalIndex = i
>         increment = 0
>         for j in range(len(subList)):
>             if mainList[globalIndex] == subList[j]:
>                 globalIndex += 1
>                 increment += 1
>                 if j == (len(subList)-1):
>                     resultIndex.append(globalIndex-increment)
>             else:
>                 break
>
>     return resultIndex
>
> if __name__ == "__main__":
>     #Test case
>     mL = [ 'a', 'b', 'c', 1, 2, 4, 1, 2, 1, 1, 1, 2, 9, 1, 1, 1, 2, 3,
> 'a', 1, 2, 3, 4 ]
>     #mL = [ 'a', 'a', 'b', 1 ,2 ,3, 5, 6]
>     sL = [ 1, 2, 3 ]
>     result = findAllMatchingList( mL, sL )
>     for i in result:
>         print str(i)
>
> Regards,
> Gaurav.




More information about the Python-list mailing list