Si j'ai une liste, dites:

foo =  [[4, 6, 2, 7], [1.2, 8.3, 9, 16]]

Je peux obtenir la moyenne de chaque élément comme suit:

[(a + b) / 2 for a, b in zip(foo[0], foo[1])]

Ou

import statistics
[statistics.mean(i) for i in zip(foo[0], foo[1])]

Comment puis-je faire de même avec un nombre arbitraire de listes imbriquées dans foo?

J'ai essayé plusieurs choses mais elles ne fonctionnent pas, par exemple:

[statistics.mean(i) for i in zip(list(foo))]

Je préférerais fortement utiliser simplement la compréhension.

0
Pearly Spencer 2 juin 2020 à 13:25

3 réponses

Meilleure réponse

Le code suivant devrait faire le travail:

[sum(i)/len(i) for i in zip(*foo)]
1
oreopot 2 juin 2020 à 10:43

Si vous ne souhaitez utiliser aucun package:

[statistics.mean([foo[j][i] for j in range(len(foo))]) for i in range(len(foo[0]))]

Avec numpy ce serait

import numpy as np
arr = np.array(foo)
means = np.mean(arr,axis=0)

modifier

Sans aucun package:

[sum([foo[j][i] for j in range(len(foo))])/len(foo) for i in range(len(foo[0]))]
1
David Wierichs 2 juin 2020 à 10:37

Essaye ça:

import statistics
foo =  [[4, 6, 2, 7], [1.2, 8.3, 9, 16]]
x = [statistics.mean(i) for i in zip(*foo)]
print(x)
1
apoorva kamath 2 juin 2020 à 10:36