Не намного быстрее, но, возможно, более чисто, используя понимание списка
c = [elem for elem in a if elem[1] not in b]
Если b
очень велико, то преобразование в набор значительно ускорит поиск, поскольку поиск в спискахв линейном времени O(n)
, но поиск в наборах происходит в постоянном времени O(1)
b_set = set(b)
c = [elem for elem in a if elem[1] not in b_set]
Если элементы index-1 a
('aaa', 'bbb',
и т. д.) уникальны, тогда это может быть даже быстрее, потому что тогда мы можем использовать оператор разности множеств -
a_dict = {k: v for v, k in a}
b_set = set(b)
set_difference = a_dict.keys() - b_set
c = [(a_dict[k]: k) for k in set_difference]