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