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