как ускорить цикл

Рейтинг: 0Ответов: 1Опубликовано: 14.04.2023

как можно ускорить этот цикл в списках только int и float

    for x in value['items']:
         for name,price in kurs:
            if x['classId'] == name:
              if dar < price:
               next_def(name,x['classId'])

примерное время выполнения сейчас 1.3-1.5 секунд

Ответы

▲ 0
  1. Использование множества для хранения name значений:
name_set = set(name for name, _ in kurs)
for x in value['items']:
    if x['classId'] in name_set:
        for name, price in kurs:
            if x['classId'] == name:
                if dar < price:
                    next_def(name, x['classId'])
  1. Сортировка списка value['items'] и kurs перед циклами:
value_items = sorted(value['items'], key=lambda x: x['classId'])
kurs = sorted(kurs)
 i, j = 0, 0
while i < len(value_items) and j < len(kurs):
    if value_items[i]['classId'] == kurs[j][0]:
        if dar < kurs[j][1]:
            next_def(kurs[j][0], value_items[i]['classId'])
        i += 1
        j += 1
    elif value_items[i]['classId'] < kurs[j][0]:
        i += 1
    else:
        j += 1
  1. Использование словаря для хранения kurs значений:
kurs_dict = dict(kurs)
for x in value['items']:
    if x['classId'] in kurs_dict and dar < kurs_dict[x['classId']]:
        next_def(kurs_dict[x['classId']], x['classId'])