one-liner to check if at least one item in list exists in another list? [duplicate]

Lets say I have a list a=[1,2,3] And I want to know if at least one of the numbers in it exist in another list, like this one: b=[4,5,6,7,8,1] In other words, I want to know if 1,2 or 3 exist(s) in list b. I now I could do something like

def func(a, b):
    for i in a:
       if i in b:
          return True
    return False

But is there possibly a way to put that in one line to make things tidy?


Solution 1:

Python 2.6 and above:

def func(a, b):
  return not set(a).isdisjoint(b)

For 2.4 or 2.5:

def func(a, b):
  return len(set(a).intersection(b)) != 0

For 2.3 and below:

sudo apt-get update
sudo apt-get upgrade

;)

Solution 2:

a simple one-liner would be:

any(i in b for i in a)

Solution 3:

There are many ways to do this. The most direct translation is:

any_in = lambda a, b: any(i in b for i in a)

You could also use various things involving sets, such as:

any_in = lambda a, b: bool(set(a).intersection(b))

(which depends on the elements of a being hashable, but if that's true, it'll probably be faster to make a set of the larger out of a and b for either of these approaches).

Edit: isdisjoint is better than intersection for Python 2.6 and above, as noted by various people below. Glad to learn about that. :)