добавить значения в список на основе индекса другого списка Python - PullRequest
0 голосов
/ 04 июня 2019

У меня есть следующий список:

list1=[2,3,5,9,12]

И еще один список, который является индексом для позиций list1

list2=[1,3]

Я хотел бы добавить 2 к позиционным значениям list1, индексированным в list2

Вывод должен быть

[2,4,5,12,12]

Я думал в цикле

for value in list2:
    list1[value]+2

Однако в list1 не вносятся никакие изменения, и я уверен, что для этого должен быть способ в 1 строку.

Ответы [ 2 ]

2 голосов
/ 04 июня 2019

Решение вашей проблемы:

>>> 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, иначе обычное значение.

0 голосов
/ 04 июня 2019

Вы пропустили назначение значения здесь:

    list1[value]+2

Это вычисляет желаемое значение, но не меняет того, что хранится в list1[value].
Вы можете использовать = или +=, чтобы назначить результат вашего вычисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...