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])
添加回答
举报