列表中仅给定索引与另一个整数的总和
Sum of only given index in a list with an another integer
我想对这个列表中的特定索引求和
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]
任何人都可以帮助我获得预期的输出吗?
使用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]
或者,使用 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 索引。然而,这需要第 3 方 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]
首先,我将回答有关失败原因的问题。您正在获取数组 b
的 slice
。这转化为,
>>> 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
然而,最 pythonic 会涉及列表理解,您可以在其他答案中看到,但 IMO 对您来说似乎有点高级。
我想对这个列表中的特定索引求和
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]
任何人都可以帮助我获得预期的输出吗?
使用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]
或者,使用 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 索引。然而,这需要第 3 方 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]
首先,我将回答有关失败原因的问题。您正在获取数组 b
的 slice
。这转化为,
>>> 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
然而,最 pythonic 会涉及列表理解,您可以在其他答案中看到,但 IMO 对您来说似乎有点高级。