Сумма только указанного индекса в списке с другим целым числом
Я хочу суммировать конкретный индекс в этом списке
b = [3,4,6,8,9]
b[2:4] += 100
print(b)
Когда я пытаюсь выполнить, я получаю:
b[2:4] += 100
TypeError: 'int' object is not iterable
Ожидаемый результат:
[3,4,106,108,9]
Может ли кто-нибудь помочь мне получить ожидаемый результат?
4 ответа
Использование enumerate
и список понимания
>>> b=[3,4,6,8,9]
>>> [e*100 if i in range(2,4) else e for i,e in enumerate(b)]
[3, 4, 600, 800, 9]
Списки Python не работают так. Просто используйте цикл над индексами.
>>> b
[3, 4, 6, 8, 9]
>>> for i in range(2, 4):
... b[i] += 100
...
>>> b
[3, 4, 106, 108, 9]
Или используйте numy массивы, которые точно поддерживают этот синтаксис:
>>> import numpy as np
>>> b = np.array([3, 4, 6, 8, 9])
>>> b[2:4] += 100
>>> b
array([ 3, 4, 106, 108, 9])
То, на что вы надеетесь, это индексирование NumPy. Однако для этого требуется сторонняя библиотека NumPy:
import numpy as np
b = [3,4,6,8,9]
b = np.array(b)
b[2:4] += 100
print(b)
array([ 3, 4, 106, 108, 9])
В чистом Python вы можете использовать понимание списка. Чтобы избежать необходимости повторять индексы, вы можете определить slice
объект:
s = slice(2, 4)
b[s] = [i+100 for i in b[s]]
print(b)
[3, 4, 106, 108, 9]
Сначала я отвечу на вопрос, почему это не удается. Вы принимаете slice
вашего массива b
, Что переводится как,
>>> b = [3, 4, 6, 8, 9]
>>> b[2:4]
[6, 8]
Тогда вы говорите, b[2:4] + 100
что эквивалентно [6, 8] + 100
но что это значит для Python? Вы хотите добавить 100
к списку? Вы хотите добавить 100
к первому элементу? Второй?
Вы начинаете видеть здесь двусмысленность? Как уже отмечали другие, это поведение определяется для массивов numpy, но не для vanilla python.
Есть много решений для этого, но IMO следующее является самым ясным решением.
b = [3, 4, 6, 8, 9]
for i in range(2, 4):
b[i] += 100
Тем не менее, наиболее питоническим может быть понимание списка, которое вы можете увидеть в других ответах, но IMO, который кажется вам немного продвинутым.