我有一个包含以下值的列表
h = [
('red', array([50, 344])),
('blue', array([15, 55])),
('green', array([1, 1])),
('orange', array([3, 7])),
('red', array([1, 1]))
]
如果标签相同,我想循环遍历列表并对numpy.arrays求和。因此,鉴于上面的示例,因为有两个“红色”实例,所需的结果将是相同的列表,但
('red', array([ 50, 344])) + ('red', array([1, 1])) = ('red', array([51, 345]))
我尝试过像
这样的嵌套循环for i in range(0, len(h)):
for p in range(0, len(h)):
if (h[i][0] == h[p][0]):
A = h[i][1] + h[p][1]
但是,此代码还会将实例h[i][0]
的值与自身相加,但我不希望这样。我想做以下事情 - 对于每个实例,如果没有我自己的其他实例的标签是相同的,那么将它们添加到我而不添加我自己的价值。我希望这很清楚
答案 0 :(得分:4)
我建议使用字典来执行此操作:
out = {}
for colour, array_ in h:
if colour in out:
out[colour] += array_
else:
out[colour] = array_
然后,您可以将列表作为out.items()
返回给我。
[('blue', array([15, 55])), ('orange', array([3, 7])),
('green', array([1, 1])), ('red', array([ 51, 345]))]
为你的例子。
这个单循环比现在的双循环更有效,因为它只处理列表中的每个项目一次。
答案 1 :(得分:0)
您可以添加一行
if i==p:
continue
此外,范围函数中的0,
可以省略,因为它始终从0开始。