序列的平均值为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 和measures,这对你来说没什么大不了的长度相同,但如果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]]))
所以请随意使用适合您要求的示例,不要忘记添加文档字符串。
您可能不需要这样的pythonic方式,但当字典理解发挥作用时,它可能会更短:
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]]))