Python перебирает только последнее значение списка

Я использую пакет для запроса списка ячеек в моем Листе Google и собираюсь передать элементы в другом списке (прогнозе) значениям списка Google Sheet. Однако, когда я запускаю свои циклы, он пропускает последний элемент в моем списке прогнозов через каждую ячейку Google Sheet в моем списке. Я неправильно настраиваю циклы for? Это из-за типов элементов списка?

Я пытался следовать разделу библиотеки "Обновление ячеек" (в пакетном режиме): Gspread

Вот как выглядят два списка:

forecasting_range:

Тип = <class 'gspread.models.Cell'>

[<Cell R2C3 '179'>, <Cell R3C3 ''>,...,<Cell R32C3 ''>]

forecasted_session_column:

Тип = <class 'list'>

 ['179', '754.6296810633474', '638.2052995605169',...,'607.1381980696942']

Вот моя настройка Loop:

for cell in forecasting_range:
    for forecast in forecasted_session_column:
        cell.value = forecast

Выход:

[<Cell R2C3 '607.1381980696942'>, <Cell R3C3 '607.1381980696942'>,...,<Cell R32C3 '607.1381980696942'>]

2 ответа

Решение

Если я вас правильно понимаю, вы хотите, чтобы в ячейке 1 был прогноз 1, в ячейке 2 прогноз 2 и так далее. Если так, то используйте один цикл, а не два.

Каждый раз, когда выполняется ваш внешний цикл, он устанавливает значение каждой ячейки в forecasting_range к каждому значению в forecasted_session_column, В конце выполнения каждого внутреннего цикла ячейка будет содержать только последнее значение.

for i in range(0,len(forecasting_range)):
    forecasting_range[i].value = forecasted_session_column[i]

Это использует переменную i вести учет индекса в обоих списках, чтобы они совпадали. Обратите внимание, что это решение предполагает, что оба списка имеют одинаковую длину.

Во втором цикле вы перебираете список forecasted_session_column, Вы устанавливаете каждый cell в 179и затем следующее значение, а затем следующее, пока не будет установлено значение '607.1381980696942',

Пример из IDLE того, что происходит:

>>> cells = [i for i in range(10)]
>>> values = ['a', 'b', 'c']
>>> for cell in cells:
    for value in values:
        cells[cell] = value
>>> cells
['c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c']
Другие вопросы по тегам