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

时间:2018-08-17 16:54:01

标签: 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]

有人可以帮我得到我的期望输出吗?

4 个答案:

答案 0 :(得分:2)

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])

答案 1 :(得分:1)

您希望的是NumPy索引。但是,这需要第三方NumPy库:

list_of_file_sets <- lapply(v, function(pattern) {
    file_set <- lapply(list.files(pattern=pattern), function(file) {
        read.table(file, sep=',', header=T, stringsAsFactors=F)
    })
    file_set <- dplyr::bind_rows(file_set)
})
names(list_of_file_sets) <- v # Optionally set names of list to 7 digit pattern

在纯Python中,您可以使用列表推导。为了避免重复索引,可以定义一个slice对象:

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])

答案 2 :(得分:1)

首先,我将回答有关为什么失败的问题。您正在获取数组slice中的b。转换为

>>> b = [3, 4, 6, 8, 9]
>>> b[2:4]
[6, 8]

然后您说b[2:4] + 100等效于[6, 8] + 100,但这对Python意味着什么?您是否要将100附加到列表中?您是否要将100添加到第一个元素?第二个?

您开始在这里看到歧义了吗?正如其他人指出的那样,此行为是为numpy数组定义的,而不是为香草python定义的。

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

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

但是,最Python的语言涉及列表理解,您可以在其他答案中看到,但是IMO对您来说似乎有点高级。

答案 3 :(得分:0)

使用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]