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

时间:2015-02-17 00:17:45

标签: python arrays

我有一个表格

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

前两列是与我想要求和的列表对应的索引。最后一栏是用于簿记的,因为它对应于真实世界的应用程序。

现在我还有一个名为Ehisto的列表。我想对每个索引范围求和,如b1c_loc的行中所示,如b1c_loc [0] [0]到b1c_loc [0] [1],对于Ehisto的每一行都要向下求和,并将相应的求和加到每个行,某种形式:

[索引1,索引2,标签,Ehisto中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_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非常陌生,我还在学习。在此先感谢您的任何帮助

1 个答案:

答案 0 :(得分:3)

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

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使用_为第三个元素解包每个元组的三个子元素,因为我们不打算使用它。然后,我们只需从a中减去b

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

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

当您使用逗号,时,您的代码会因使用冒号分隔值而失败。

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

在旁注中,对变量名ehisto等使用小写。

相关问题