Я бы создал подкласс кортежа, который имеет специальные __eq__
и __hash__
методы:
>>> class SpecialTuple(tuple):
... def __eq__(self, t):
... return self[1] == t[1] and self[2] == t[2]
... def __hash__(self):
... return hash((self[1], self[2]))
...
Он сравнивает col1
и col2
и говорит, что кортеж равен при условии, что столбцы идентичны.
Тогда фильтрация просто использует пересечение set
на этих специальных кортежах:
>>> list1 = [ (0, 1, 2, 0), (0, 3, 4, 0), (1, 2, 3, 12) ]
>>> list2 = [ (0, 1, 1, 0), (0, 3, 9, 9), (42, 2, 3, 12) ]
>>> set(map(SpecialTuple, list1)) & set(map(SpecialTuple, list2))
set([(42, 2, 3, 12)])
Я не знаю, как быстро. Скажи мне. :)