使用索引数组对切片列表求和

2024-09-30 18:14:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列的索引

 b1c_loc= [
    (1843, 1854, 63),
    (32144, 32155, 56),
    (32516, 32556, 71),
    (32589, 32600, 60),
    (34081, 34092, 66),
    (35600, 35611, 67),
]

前两列是对应于我要在其中求和的列表的索引。最后一列只用于簿记,因为它对应于实际应用程序。你知道吗

现在我也有一个叫做Ehisto的列表。我想对每个索引范围进行求和,如b1c\u loc的行所示,如b1c\u loc[0][0]到b1c\u loc[0][1]中的每一行的Ehisto,并将相应的求和附加到每一行,形式如下:

[Ehisto中的index1,index2,label,index1和index2之和]

或者,用占位符数字

 [
    (1843, 1854, 63, 1),
    (32144, 32155, 56, 2),
    (32516, 32556, 71, 3),
    (32589, 32600, 60, 4),
    (34081, 34092, 66, 5),
    (35600, 35611, 67, 6),
]

这是我的尝试:

for s in b1c_loc:
    np.append(sum([Ehisto[s[0]]:Ehisto[s[1]]]))

我想用b1c\u loc中存储的索引对一段Ehisto进行求和。这不管用。相反,我得到了一个错误

In [37]: for s in b1c_loc:
   ....:         np.append(sum([Ehisto[s[0]]:Ehisto[s[1]]]))
   ....:     
  File "<ipython-input-37-b0e7c475a95d>", line 2
    np.append(sum([Ehisto[s[0]]:Ehisto[s[1]]]))
                               ^
SyntaxError: invalid syntax

我这样做是不是完全错了?这看起来很简单,我不觉得我做了什么疯狂的事,但这个错误出现了。不管怎样,如果这个问题措辞不太好,我很抱歉。我对python真的很陌生,我还在学习。提前谢谢你的帮助


Tags: in应用程序列表for错误nploc形式
1条回答
网友
1楼 · 发布于 2024-09-30 18:14:55

如果要访问每个元组的第一个和第二个元素,只需解压缩:

b1c_loc= [
    (1843, 1854, 63),
    (32144, 32155, 56),
    (32516, 32556, 71),
    (32589, 32600, 60),
    (34081, 34092, 66),
    (35600, 35611, 67),
]   

print([b - a for a, b, _ in b1c_loc])
[11, 11, 40, 11, 11, 11]

for a, b, _ in b1c_loc为第三个元素使用_解压每个元组中的三个子元素,因为我们不打算使用它。然后我们从b中减去a。你知道吗

因此,如果您想通过索引使用这些值访问Ehisto列表中的元素,我们可以使用相同的逻辑再次使用列表理解:

res = [sum((Ehisto[a], Ehisto[b])) for a, b, _ in b1c_loc]

当您应该使用逗号,时,代码会失败,因为您用冒号分隔值。你知道吗

np.append(sum([Ehisto[s[0]], Ehisto[s[1]]]))

在旁注中,变量名使用小写ehisto等。。你知道吗

相关问题 更多 >