序列的平均值为sum(sequence)/len(sequence)
,所以您需要遍历magnitudes
和measures
,计算这些平均值(算术平均值)并将其存储在字典中。
还有更多pythonic方式可以实现这一点。所有这些例子都产生了{'mag1': 2.0, 'mag2': 3.5, 'mag3': 5.0}
。
使用for i in range()
循环:
def exp(magnitudes, measures):
means = {}
for i in range(len(magnitudes)):
means[magnitudes[i]] = sum(measures[i])/len(measures[i])
return means
print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]]))
但是如果你需要一个列表的两个指数和值,您可以使用for i, val in enumerate(sequence)
的做法,是更适合在这种情况下:
def exp(magnitudes, measures):
means = {}
for i, mag in enumerate(magnitudes):
means[mag] = sum(measures[i])/len(measures[i])
return means
print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]]))
另一个问题兽皮这里:i
索引所属的magnitudes
,但我们也使用它从measures
获取值,如果您有magnitudes
和,这对您的情况不是什么大问题长度相同,但如果magnitudes
会更大,您将获得IndexError
。因此,在我看来,喜欢使用zip
函数是什么将是这里的最佳选择(实际上,因为python3.6它不需要两个列表是相同的长度,它将只使用最短的长度作为长度结果):
def exp(magnitudes, measures):
means = {}
for mag, mes in zip(magnitudes, measures):
means[mag] = sum(mes)/len(mes)
return means
print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]]))
可以随意使用哪个适合你的要求,这一个你喜欢的,不要忘记添加文档字符串的例子。
更有可能的是,你不需要例如Python的方式,但是当字典解析进场也可以是更短:
def exp(magnitudes, measures):
return {mag: sum(mes)/len(mes) for mag, mes in zip(magnitudes, measures)}
print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]]))