If your lists are long and speed becomes an important factor use frozenset
frozensets are immutable so it is important to note that they cannot be changed but are much faster in terms of speed if you only need a difference:
a = [1, 2, 3, 4, 5]
b = [9, 8, 7, 6, 5]
frozenset(a).difference(b)
returns:
frozenset({1, 2, 3, 4})
I know in your question it states that you need to know which items in list 1 do not occur in list 2, but note that this method does just that. If you want to know which items in list 2 do not occur in list one, just switch the lists:
frozenset(b).difference(a)
returns:
frozenset({6, 7, 8, 9})
Slightly different method but almost twice as fast as the methods listed above if you do not need downstream operations.
To validate what I said:
%timeit set(a).difference(set(b))
1000000 loops, best of 3: 844 ns per loop
%timeit frozenset(b).difference(a)
1000000 loops, best of 3: 588 ns per loop
Hope this clears up the discrepancy.