У меня есть список (назовем его list_1
), который исходит из электронной таблицы, которая в значительной степени основана на массивах / индексах, и я пытаюсь сравнить его с другим списком (list_2
) объектов из ответа API.
Стоит отметить, что, поскольку Sheets - это многомерная матрица, каждая строка содержит массив столбцов (например, от row[0]
до row[5]
для листа с 6 столбцами).
Чтобы убедиться, что все данные совпадают, когда я выполняю итерацию через list_1
(выполняя некоторые другие функции), мне затем нужно найти соответствующий объект в list_2
и обновить его с помощью диапазон электронной таблицы.
Я уже повторяю строки электронной таблицы (list_1
), и единственный способ сделать это - повторять list_2
каждый l oop. Это довольно дорого:
for row in list_1:
# Do some things with the row, then:
for post in list_2:
if post.id == row[0]:
setattr(post, 'range', f'A{i+2}:F{i+2}')
Я могу написать это с помощью выражения генератора, но (я полагаю?) Это все еще повторяется и все еще дорого?
for row in list_1:
# Do some things with the row, then:
setattr(list_2[next(i for i,v in enumerate(posts) if v.id == row[0])], 'range', f'A{i+2}:F{i+2}')
Есть ли способ обновить объект в массиве, найдя его значение, которое более эффективно, чем итерация по всему списку , или использование выражения генератора? Для элегантности было бы здорово, если бы я мог сделать это одной строкой, но нищие не могут выбирать.
Если это невозможно, укажите это в своем ответе для полноты.