1 回答

TA貢獻1779條經驗 獲得超6個贊
您可以通過首先重新組織字典中的數據來簡化代碼,將前兩個元素的元組作為鍵,并將相應的值放在列表中。
您可以使用 adefaultdict使這更容易。
然后,我們只需要計算每個列表的均值和方差。
from collections import defaultdict
linesort = [[1, 2, 3.00], [1, 2, 5.00], [1, 4, 7.00], [1, 4, 3.00] ,[3, 6, 5.2]]
# Let's first group the values:
d = defaultdict(list)
for x, y, val in linesort:
d[(x, y)].append(val)
# d will be: {(1, 2): [3.0, 5.0], (1, 4): [7.0, 3.0], (3, 6): [5.2]}
# Now we can build the output list:
out = []
for (x, y), values in d.items():
n = len(values)
mean = sum(values)/n
variance = sum(x**2 for x in values)/n - mean**2
out.append([x, y, mean, variance])
print(out)
# [[1, 2, 4.0, 1.0], [1, 4, 5.0, 4.0], [3, 6, 5.2, 0.0]]
要回答您的評論:
如果您想省略只有一個值的情況,只需將最后一部分更改為:
for (x, y), values in d.items():
n = len(values)
if n > 1:
mean = sum(values)/n
variance = sum(x**2 for x in values)/n - mean**2
out.append([x, y, mean, variance])
添加回答
舉報