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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 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
😉
Method 2
a simple one-liner would be:
any(i in b for i in a)
Method 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. 🙂
Method 4
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)
Method 5
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
Method 6
This should work.
def func(a, b):
return any([i in b for i in a])
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0