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

Python

Python Problem Overview


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?

Python Solutions


Solution 1 - Python

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 - Python

a simple one-liner would be:

any(i in b for i in a)

Solution 3 - Python

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. :)

Solution 4 - Python

This is a set problem, not a list problem. With the right data type, the answer is often immediately obvious :-)

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

Solution 5 - Python

By converting your lists to sets you can perform set operations on them. If the intersection is larger than 0, you have at least one element matching:

len(set(a) & set(b)) > 0

Solution 6 - Python

This should work.

def func(a, b):
    return any([i in b for i in a])

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser975135View Question on Stackoverflow
Solution 1 - PythonThomasView Answer on Stackoverflow
Solution 2 - PythonmataView Answer on Stackoverflow
Solution 3 - PythonDanicaView Answer on Stackoverflow
Solution 4 - PythonRaymond HettingerView Answer on Stackoverflow
Solution 5 - PythonMaehlerView Answer on Stackoverflow
Solution 6 - PythonrabbidrabbitView Answer on Stackoverflow