You can reach if you remove from b an element that you already iterated, that way you append to res the minimum intersections of the same elements between a and b.
a=[[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 1],[1, 1],[1, 1],[1, 5],[5, 12],[12, 6]]
b=[[0, 0],[0, 0],[0, 0],[0, 0],[0, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 5],[5, 12],[12, 6]]
res = []
for _a in a:
if _a in b:
res.append(_a)
b.remove(_a)
print (res)
>>> [[0, 0], [0, 0], [0, 0], [0, 0], [0, 1], [1, 1], [1, 1], [1, 5], [5, 12], [12, 6]]
EDIT:
You can iterate through a and get the number of the element occurrences, do the same for b and extend the res list with the minimum between occurence_count_a and occurence_count_b
Don't forget to check at the top whether the element is already in res list than, you don't need to extend it again as each iteration you can extend few elements to res (depends on the intersection between a and b) so when you get to a value that you iterated before, you don't need to worry about him as you extended res before with the minimum intersection of this element.
a=[[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 1],[1, 1],[1, 1],[1, 5],[5, 12],[12, 6]]
b=[[0, 0],[0, 0],[0, 0],[0, 0],[0, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 1],[1, 5],[5, 12],[12, 6]]
res = []
for _a in a:
if _a not in res:
occurence_count_a = a.count(_a)
occurence_count_b = b.count(_a)
res.extend ([_a for _ in range(min(occurence_count_a, occurence_count_b))])
print (res)
>>> [[0, 0], [0, 0], [0, 0], [0, 0], [0, 1], [1, 1], [1, 1], [1, 5], [5, 12], [12, 6]]
[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 1], [1, 1], [1, 1], [1, 5], [5, 12], [12, 6]]wrong?