5

I have 3 lists and I want to find the difference between the 1st/2nd and 2nd/3rd and print them.

Here is my code:

n1 = [1,1,1,2,3] 
n2 = [1,1,1,2] # Here the 3 is not found ("3" is not present in n1 at all)
n3 = [1,1,2]   # here 1 is not found (there are fewer "1"s in n3 than in n2)
for x in n1: 
   if x not in n2:
      print x  
for m in n2: 
   if m not in n3: 
      print m 

but i get only 3 as output.

How to make it output 1 and 3? I tried using sets as well, but it only printed 3 again.

Tim Pietzcker
  • 328,213
  • 58
  • 503
  • 561
user7179690
  • 1,051
  • 3
  • 17
  • 40

2 Answers2

6

Since you seem to care about the number of times an item is found in both lists, you need to either remove matched items from the list you're comparing with:

comp = n2[:]  # make a copy
for x in n1:
    if x not in comp:
        print x
    else:
        comp.remove(x)
# output: 3

or use a collections.Counter

from collections import Counter
print Counter(n1) - Counter(n2)
# output: Counter({3: 1})

which tells you which items in n1 are not in n2 or can be found more often in n1 than in n2.

So, for example:

>>> Counter([1,2,2,2,3]) - Counter([1,2])
Counter({2: 2, 3: 1})
Tim Pietzcker
  • 328,213
  • 58
  • 503
  • 561
-3

you can use set to find the difference between list.

print set(n1).difference(set(n2))
saikumarm
  • 1,565
  • 1
  • 15
  • 30