Test if list contains another list

Matimus mccredie at gmail.com
Mon Sep 8 18:24:20 CEST 2008


On Sep 8, 12:32 am, Bruno Desthuilliers
<bdesth.quelquech... at free.quelquepart.fr> wrote:
> mathieu a écrit :
>
> > Hi there,
>
> >   I am trying to write something very simple to test if a list
> > contains another one:
>
> > a = [1,2,3]
>
> > b = [3,2,1,4]
>
> > but 'a in b' returns False.
>
> Indeed. Lists are not sets, and the fact that all elements of list a
> happens to also be part of list b doesn't make the list a itself an
> element of list b.
>
>  >>> a = [1, 2, 3]
>  >>> b = [3,2,1,4]
>  >>> c = [b, a]
>  >>> a in c
> True
>  >>> b in c
> True
>  >>> c
> [[3, 2, 1, 4], [1, 2, 3]]
>  >>>
>
> > How do I check that a is indeed contained
> > in b ?
>
> But that's what you did - you *did* checked if a was contained in b, and
> this is not the case. What you want is to check if *all elements* of a
> are contained in b, which is quite another problem. Now the answer to
> your question : use sets.
>
>  >>> set(a).issubset(set(b))
> True
>  >>>
>
> HTH

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.

Matt



More information about the Python-list mailing list