У вас есть два больших списка, которые мало обновляются, так что вы можете создать словарь для них, чтобы избежать необходимости искать их наивно. Вместо этого вы можете перебирать list_c
, который меньше, и запрашивать их, используя словари. Для каждой итерации, которая создается list_c
, вы находите набор индексов в list_a
и list_b
и вычисляете их пересечение в tmp
и добавляете его к результату. Я попробовал этот подход, и код работает относительно намного быстрее. Я добавил индикатор, чтобы увидеть, как быстро работает код.
dict_a = dict()
for i,l in enumerate(list_a):
if l not in dict_a.keys():
dict_a[l] = []
dict_a[l].append(i)
dict_b = dict()
for i,l in enumerate(list_b):
if l not in dict_b.keys():
dict_b[l] = []
dict_b[l].append(i)
for j in range(1000000):
if (j % 10000)==0:
print('progress = ', int(100*j/1e6), '%')
list_c = get_list_c(some_arguments)
indices1 = []
indices2 = []
for l in list_c:
if l not in dict_a.keys():
s1 = []
else:
s1 = dict_a[l]
if l not in dict_b.keys():
s2 = []
else:
s2 = dict_b[l]
indices1.extend(s1)
indices2.extend(s2)
indices1 = set(indices1)
indices2 = set(indices2)
tmp = list(indices1.intersection(indices2))
result.append(tmp)