Finding intersection/difference between python lists
A list comprehension should work:
c = [item for item in a if item[0] not in b]
Or with a dictionary comprehension:
d = dict(a)
c = {key: value for key in d.iteritems() if key not in b}
in
is nice, but you should use sets at least for b
. If you have numpy, you could also try np.in1d
of course, but if it is faster or not, you should probably try.
# ruthless copy, but use the set...
b = set(b)
filtered = [i for i in a if not i[0] in b]
# with numpy (note if you create the array like this, you must already put
# the maximum string length, here 10), otherwise, just use an object array.
# its slower (likely not worth it), but safe.
a = np.array(a, dtype=[('key', 's10'), ('val', int)])
b = np.asarray(b)
mask = ~np.in1d(a['key'], b)
filtered = a[mask]
Sets also have have the methods difference
, etc. which probably are not to useful here, but in general probably are.
A list comprehension will work.
a = [('when', 3), ('why', 4), ('throw', 9), ('send', 15), ('you', 1)]
b = ['the', 'when', 'send', 'we', 'us']
filtered = [i for i in a if not i[0] in b]
>>>print(filtered)
[('why', 4), ('throw', 9), ('you', 1)]