我會用一個例子來說明我的問題:的Python:尋找相同的列表出現的次數和平均
A=[[1,2,10],[1,2,10],[3,4,5]]
B=[[1,2,30],[6,7,9]]
從列表的這些名單,我想創造第三個:
C=A+B
所以我得到:
C= [[1, 2, 10], [1, 2, 10], [3, 4, 5], [1, 2, 30], [6, 7, 9]]
注意到有三個列表裏面C
,如果按[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做到這一點?有任何想法嗎?
如果什麼x和z是相同的,但y是不同的? –
不,只有(x,y)必須相同。爲了給這個更多的上下文,我們假設(x,y)是座標,z是溫度。 – CosmoSurreal
不知道具體如何,但匹配列表中的項目又如何,如果x,y相等,則將該元素附加到一個新列表中,然後您將平均排列第三個位置 – chimpsarehungry