I'm looking for a method that would allow me to check what elements are missing when comparing 2 lists. A lot like in this thread but I want to write this in NumPy Python.
import numpy as np
numbers = np.array([1,2,3,4,5,6,7,8,9])
A = np.array([2,5,6,9])
def listComplementElements(list1, list2):
storeResults = []
for i in list1:
for j in list2:
if i != j:
#write to storeResults if 2 numbers are different
storeResults.append(i)
else:
#if numebrs are equal break out of the loop
break
return storeResults
result = listComplementElements(numbers, A)
print(result) #expected result [1,3,4,7,8]
At the moment the output looks like this: [1, 1, 1, 1, 3, 3, 3, 3, 4, 4, 4, 4, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9]
What am I doing wrong?
This is what you were going for:
import numpy as np
numbers = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
A = np.array([2, 5, 6, 9])
def listComplementElements(list1, list2):
storeResults = []
for num in list1:
if num not in list2: # this will essentially iterate your list behind the scenes
storeResults.append(num)
return storeResults
result = listComplementElements(numbers, A)
print(result) #expected result [1,3,4,7,8]
Prints:
[1, 3, 4, 7, 8]
You should only have one loop and then say if not in
to evaluate the relationship with the second list. Otherwise you will loop unnecessarily and like you saw, it will output the result many times! Furthermore, using operators like is in
or not in
makes your code more readable than trying to comprehend many nested loops :)