我将用一个例子来解释我的问题:
A=[[1,2,10],[1,2,10],[3,4,5]]
B=[[1,2,30],[6,7,9]]
从这些列表中,我想创建第三个列表:
^{pr2}$所以我得到:
^{3}$请注意,C
中有三个列表,
[1, 2, 10], [1, 2, 10], [1, 2, 30]
列表,如果用[x,y,z]来描述,它们有相同的x,y,但z不同
所以我想要一个新的列表:
Averaged= [(1, 2, 16.666), (6, 7, 9), (3, 4, 5)]
我们在列表中只找到一个相同的x,y
[1, 2, 30], [1, 2, 40], [1, 2, 50]
以及相应z值的平均值(10+10+30)/3=16.666
我在开始时尝试使用for
循环,但最终尝试使用defaultdict
来实现这一点。在
最后我得到了一个只保留(x,y)的方法,但对相应的z值相加而不是求平均值:
from collections import defaultdict
Averaged=[]
A=[[1,2,10],[1,2,10],[3,4,5]]
B=[[1,2,30],[6,7,9]]
C=A+B
print "C=",C
ToBeAveraged= defaultdict(int)
for (x,y,z) in C:
ToBeAveraged[(x,y)] += z
Averaged = [k + (v,) for k, v in ToBeAveraged.iteritems()]
print 'Averaged=',Averaged
可以用defaultdict来实现吗?有什么想法吗?在
您需要先对数据进行排序:
如果你想在分组前平均:
^{pr2}$在您的代码中,您不能除以观察值的数量。我把你的密码改成了 收集给定对(x,y)的所有观测值,然后取它们的平均值。应该有一个更有效的解决办法,但这应该是有效的。在
结果:
^{pr2}$相关问题 更多 >
编程相关推荐