Smashingly с временной хеш-таблицей (dict), где кортежи "большой список" являются ключами, а их индексы - значениями.
Начальная статистика захода на посадку:
from timeit import timeit
def findTupleIndices(sub_lst, search_lst):
comList = sorted(set(sub_lst) & set(search_lst), key=sub_lst.index)
idx = [search_lst.index(x) for x in comList]
return idx
# sub_lst, search_lst are lists of tuples extracted from `ftp://ftp.lrz.de/transfer/List_Intersect/`
print(timeit('findTupleIndices(sub_lst, search_lst)', 'from __main__ import findTupleIndices, sub_lst, search_lst', number=1000))
Выход:
191.43023270001868
Статистика нового подхода:
from timeit import timeit
def find_tuple_indices(sub_lst, search_lst):
pos_dict = dict((t,i) for i, t in enumerate(search_lst))
return [pos_dict[t] for i, t in enumerate(sub_lst) if t in pos_dict]
# sub_lst, search_lst are lists of tuples extracted from `ftp://ftp.lrz.de/transfer/List_Intersect/`
print(timeit('find_tuple_indices(sub_lst, search_lst)', 'from __main__ import find_tuple_indices, sub_lst, search_lst', number=1000))
Выход:
1.4070011030125897