Решение вашей проблемы:
>>> for value in list2:
... list1[value] += 2
...
>>> list1
[2, 5, 5, 11, 12]
+=
является синтаксическим сахаром для list1[value] = list1[value] + 2
. При использовании list1[value] + 2
происходит то, что Python сначала оценивает значение list1[value]
, а затем добавляет к нему 2, но это значение нигде не сохраняется.
Другой способ - использовать понимание списка:
>>> list1=[2,3,5,9,12]
>>> list2=[1,3]
>>> list_final = [value + 2 if index in list2 else value for index, value in enumerate(list1)]
>>> list_final
[2, 5, 5, 11, 12]
Здесь
list_final = [value + 2 if index in list2 else value for index, value in enumerate(list1)]
мы создаем новый список list_final
, который в основном использует enumerate
для создания списка кортежей, содержащих пары значений и их индексы в list1
. Оттуда мы добавляем в новый список value + 2
, если индекс этого значения находится в list2
, иначе обычное значение.