Python 列表中仅给定索引与另一个整数的和

Python 列表中仅给定索引与另一个整数的和,python,list-manipulation,Python,List Manipulation,我想对列表中的特定索引求和 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] 有人能帮我获得预期的输出吗?使用枚举和列表理解 >>> b=[3,4,6,8,9] >>> [e*100 if i in range(2,4) else e for i,e

我想对列表中的特定索引求和

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]
有人能帮我获得预期的输出吗?

使用枚举和列表理解

>>> 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]
使用枚举和列表理解

>>> 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]
或者,使用numpy数组,它确实支持该语法:

>>> import numpy as np
>>> b = np.array([3, 4, 6, 8, 9])
>>> b[2:4] += 100
>>> b
array([  3,   4, 106, 108,   9])

Python列表不是这样工作的。只需在索引上使用循环

>>> b
[3, 4, 6, 8, 9]
>>> for i in range(2, 4):
...     b[i] += 100
...     
>>> b
[3, 4, 106, 108, 9]
或者,使用numpy数组,它确实支持该语法:

>>> 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中,可以使用列表理解。为了避免重复索引,您可以定义一个对象:


你希望的是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中,可以使用列表理解。为了避免重复索引,您可以定义一个对象:


首先,我将回答一个问题,即为什么这样做失败。你要从数组b中取一个片段。也就是说

>>> b = [3, 4, 6, 8, 9]
>>> b[2:4]
[6, 8]
然后你会说,b[2:4]+100,相当于[6,8]+100,但这对Python意味着什么?是否要在列表中追加100?是否要将100添加到第一个元素?第二个

你开始看到这里的模糊性了吗?正如其他人所指出的,这种行为是为numpy数组定义的,而不是为普通python定义的

对此有很多解决方案,但以下是最清晰的解决方案

b = [3, 4, 6, 8, 9]
for i in range(2, 4):
    b[i] += 100

然而,最具python风格的是一个列表理解,你可以在其他答案中看到,但在我看来,这对你来说似乎有点高级。

首先,我要回答一个问题,为什么这样做会失败。你要从数组b中取一个片段。也就是说

>>> b = [3, 4, 6, 8, 9]
>>> b[2:4]
[6, 8]
然后你会说,b[2:4]+100,相当于[6,8]+100,但这对Python意味着什么?是否要在列表中追加100?是否要将100添加到第一个元素?第二个

你开始看到这里的模糊性了吗?正如其他人所指出的,这种行为是为numpy数组定义的,而不是为普通python定义的

对此有很多解决方案,但以下是最清晰的解决方案

b = [3, 4, 6, 8, 9]
for i in range(2, 4):
    b[i] += 100
然而,最具python风格的是列表理解,你可以在其他答案中看到,但在我看来,这对你来说似乎有点先进