Une moyenne d'une séquence est sum(sequence)/len(sequence)
, donc vous devez itérer les deux magnitudes
et measures
, le calcul de ces moyens (moyennes arithmétiques) et le stocker dans un dictionnaire.
Il y a beaucoup plus de façons pythoniques de réaliser cela. Tous ces exemples produisent {'mag1': 2.0, 'mag2': 3.5, 'mag3': 5.0}
comme résultat.
En utilisant la boucle 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]]))
Mais si vous avez besoin des deux indices et les valeurs d'une liste que vous pouvez utiliser l'approche for i, val in enumerate(sequence)
qui est beaucoup plus approprié dans ce cas:
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]]))
Une autre cache problème ici: i
index appartient à magnitudes
mais nous obtenons également des valeurs de measures
en l'utilisant, ce n'est pas une grosse affaire dans votre cas si vous avez magnitudes
et measures
la même longueur, mais si magnitudes
sera plus grande, vous obtiendrez un IndexError
. Donc, il me semble que l'utilisation zip
fonction est ce qui serait le meilleur choix ici (en fait, à partir de python3.6, il ne nécessite pas deux listes pour être de la même longueur, il utilisera simplement la longueur du plus court comme la longueur de résultat):
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]]))
se sentent donc libre d'utiliser l'exemple qui convient à vos besoins de celui que vous aimez et ne pas oublier d'ajouter docstring.
Plus probable que vous n'avez pas besoin tels pythonique façon mais il peut être encore plus court quand compréhension du dictionnaire entre en jeu:
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]]))