Subtracting two lists in Python Subtracting two lists in Python python python

Subtracting two lists in Python


I know "for" is not what you want, but it's simple and clear:

for x in b:  a.remove(x)

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

for x in b:  if x in a:    a.remove(x)


I would do it in an easier way:

a_b = [e for e in a if not e in b ]

..as wich wrote, this is wrong - it works only if the items are unique in the lists. And if they are, it's better to use

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


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 Countera = Counter([0, 1, 2, 1, 0])b = Counter([0, 1, 1])c = a - b  # ignores items in b missing in aprint(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 exceptionassert 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.

try:   from collections import Counterexcept ImportError:    class Counter(dict):       ...

You can find the current Python source here.