0
votes

calculer la moyenne de chaque subliste séparément dans une liste de listes

Je suis vraiment nouveau à Python et j'essaie de trouver la moyenne d'une liste de listes. J'ai une liste des listes de nombres de flotteurs qui indiquent les qualités de cours par semestre et ressemble à ceci:

for s in mylist:  # for each list
        gpa = sum(s) / len(s)
        allGPA.append(gpa)
        for x in s:  # for each sublist
            x_ = x if type(x) is list else [x]
            myaverage.append(sum(x_) / float(len(x_)))


5 commentaires

Nitpick: au lieu de si type (x) est la liste , utilisez si isinstance (x, liste)


MyList est une liste de listes de listes, de sorte que vous avez besoin d'une boucle supplémentaire là-bas. Ou, remplacez tout avec np.array (myList) .Mean (axe = -1)


Vous avez 2 niveaux de sublistes. Vous vous attendez peut-être à Imprimer ([[[[SUM (I) / LEN (I) pour I in L] pour L dans la myiste])


@Marat Ceci me donne une erreur de _method.py in _Mean: ret = ret / rcount, puis à nouveau: TypeError: type (s) de l'opérande non pris en charge pour /: 'Liste' et 'int' et 'int'


@PIGGY J'ai mis à jour ma réponse et c'est comme vos attentes. Jetez un coup d'oeil s'il vous plait.


3 Réponses :


1
votes

Essayez:

from statistics import mean

avg = [[ mean(sub_list) for sub_list in list ] for list in mylist]


0 commentaires

1
votes

Vérifiez que j'ai mis à jour ma réponse, la sortie est telle que vous voulez. ** sortie ** xxx


2 commentaires

Merci pour votre réponse! Cela me donne une liste et non une liste avec les sublistes comme dont j'avais besoin.


Pas de problème @piggy



1
votes

Je pense qu'il serait prudent de conserver vos données dans une sorte de collection, utilise un dictionnaire et créer une fonction lisible pour analyser vos données.

Fonction H2>
return_averages(mylist)


defaultdict(list,
            {0: [2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335],
             1: [2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335]})


0 commentaires