I'm trying to compare two lists and simply print a message if any value from the first list is in the second list.
def listCompare():
list1 = [1, 2, 3, 4, 5]
list2 = [5, 6, 7, 8, 9]
if list1 in list2:
print("Number was found")
else:
print("Number not in list")
In this example, I want the if
to evaluate to True
because 5 is in both lists. This doesn't work, and I'm not sure of the simplest way to compare the two lists.
Using any() along with a generator expression: list1 = ['item1','item2','item3'] list2 = ['item4','item5','item3'] if any(x in list1 for x in list2): print("Duplicates found.") else: print("No duplicates found.")
To check if the item exists in the list, use Python “in operator”. For example, we can use the “in” operator with the if condition, and if the item exists in the list, then the condition returns True, and if not, then it returns False.
Check if list1 contains any elements of list2 using any() Python any() function checks if any Element of given Iterable is True. So, convert the list2 to Iterable and for each element in Iterable i.e. list2 check if any element exists in list1.
You could solve this many ways. One that is pretty simple to understand is to just use a loop.
def comp(list1, list2): for val in list1: if val in list2: return True return False
A more compact way you can do it is to use map
and reduce
:
reduce(lambda v1,v2: v1 or v2, map(lambda v: v in list2, list1))
Even better, the reduce
can be replaced with any
:
any(map(lambda v: v in list2, list1))
You could also use sets:
len(set(list1).intersection(list2)) > 0
There are different ways. If you just want to check if one list contains any element from the other list, you can do this..
not set(list1).isdisjoint(list2)
I believe using isdisjoint
is better than intersection
for Python 2.6 and above.
Your original approach can work with a list comprehension:
def listCompare():
list1 = [1, 2, 3, 4, 5]
list2 = [5, 6, 7, 8, 9]
if [item for item in list1 if item in list2]:
print("Number was found")
else:
print("Number not in list")
There is a built in function to compare lists:
Following is the syntax for cmp() method −
cmp(list1, list2)
#!/usr/bin/python
list1, list2 = [123, 'xyz'], [123, 'xyz']
print cmp(list1,list2)
When we run above program, it produces following result −
0
If the result is a tie, meaning that 0 is returned
You could change the lists to sets and then compare both sets using the & function. eg:
list1 = [1, 2, 3, 4, 5]
list2 = [5, 6, 7, 8, 9]
if set(list1) & set(list2):
print "Number was found"
else:
print "Number not in list"
The "&" operator gives the intersection point between the two sets. If there is an intersection, a set with the intersecting points will be returned. If there is no intersecting points then an empty set will be returned.
When you evaluate an empty set/list/dict/tuple with the "if" operator in Python the boolean False is returned.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With