Subtracting two lists in Python

Subtracting two lists in Python

I know for is not what you want, but its simple and clear:

for x in b:

Or if members of b might not be in a then use:

for x in b:
  if x in a:

I would do it in an easier way:

a_b = [e for e in a if not e in b ] wich wrote, this is wrong – it works only if the items are unique in the lists. And if they are, its better to use

a_b = list(set(a) - set(b))

Subtracting two lists in Python

Python 2.7 and 3.2 added the collections.Counter class, which is a dictionary subclass that maps elements to the number of occurrences of the element. This can be used as a multiset. You can do something like this:

from collections import Counter
a = Counter([0, 1, 2, 1, 0])
b = Counter([0, 1, 1])
c = a - b  # ignores items in b missing in a

print(list(c.elements()))  # -> [0, 2]

As well, if you want to check that every element in b is in a:

# a[key] returns 0 if key not in a, instead of raising an exception
assert all(a[key] >= b[key] for key in b)

But since you are stuck with 2.5, you could try importing it and define your own version if that fails. That way you will be sure to get the latest version if it is available, and fall back to a working version if not. You will also benefit from speed improvements if if gets converted to a C implementation in the future.

   from collections import Counter
except ImportError:
    class Counter(dict):

You can find the current Python source here.

Leave a Reply

Your email address will not be published. Required fields are marked *