Вы повторяете ненужные каждый раз с начала списка. Предположим, что ваши списки выглядят так:
[12, 11, 10, 5, 4, 4] #tg
[13, 13, 13, 2, 1, 0] #op
Для 12 вы l oop до 2 во втором списке. Для 11 вы l oop до 1 и для 10 вы l oop до 0. Несмотря на то, что вы вытолкнули элемент, вы сравниваете 12,11,10 со всеми 13, то есть 9 сравнений. Поскольку вы уже знаете, что 13> 12, нет необходимости сравнивать 11 или 10 с 13, что экономит вам 6 сравнений. Это потому, что вы отсортировали и знаете, что каждое последующее число будет меньше любого числа, оставшегося от последнего элемента списка операций.
Зная это, вы можете воспользоваться преимуществом, сохранив ненужные сравнения, начав со следующего элемента список операций:
from itertools import islice
def get_info(n,tg,op):
cnt = 0
start_index = 0
for index, tg_element in enumerate(tg):
for op_element in islice(op,start_index,None):
start_index += 1
if tg_element > op_element:
cnt += 1
break
return cnt
Сложность вашего алгоритма была излишне в O (n ^ 2).