Hvordan laver man et gennemsnit af en liste af lister i Python?

Problem: Du har en liste af lister, og du ønsker at beregne gennemsnittet af de forskellige kolonner.

Eksempel: Givet følgende liste af lister med fire rækker og tre kolonner.

data = , , , ]

Du ønsker at have gennemsnitsværdierne for de tre kolonner:


Der er tre metoder, der løser dette problem. Du kan lege med dem i den interaktive shell og læse flere detaljer nedenfor:

Indholdsfortegnelse

Metode 1: Gennemsnit i Python (Intet bibliotek)

En simpel one-liner med list comprehension i kombination med funktionen zip() på den udpakkede liste for at transponere listen af lister klarer opgaven i Python.

data = , , , ]# Method 1: Pure Pythonres = print(res)# 

Er du vild med one-liners i Python? Det gør jeg helt sikkert – jeg har endda skrevet en hel bog om det sammen med San Francisco-forlaget NoStarch. Klik for at se bogen i en ny fane:

Du kan visualisere kodeudførelsen og hukommelsesobjekterne i denne kode i følgende værktøj (klik blot på “Næste” for at se, hvordan et trin af koden udfolder sig).

Metode 2: Gennemsnit med NumPy-biblioteket

Du opretter et NumPy-array ud fra dataene og sender det til funktionen np.average().

data = , , , ]# Method 2: NumPyimport numpy as npa = np.array(data)res = np.average(a, axis=0)print(res)# 

Det axis argument i funktionen average definerer, langs hvilken akse du vil beregne gennemsnitsværdien. Hvis du ønsker at beregne et gennemsnit af kolonner, skal du definere axis=0. Hvis du ønsker at beregne gennemsnittet af rækker, skal du definere axis=1. Hvis du ønsker at beregne gennemsnittet over alle værdier, skal du springe dette argument over.

Metode 3: Gennemsnitsstatistikbibliotek + Map()

For at vise dig et andet alternativ, er her et, der bruger funktionen map() og vores zip(*data) trick til at transponere “matrixen” data.

data = , , , ]# Method 3: Statistics + Map()import statisticsres = map(statistics.mean, zip(*data))print(list(res))# 

Funktionen map(function, iterable) anvender function på hvert element i iterable. Som et alternativ kan du også bruge list comprehension som vist i metode 1 i denne vejledning. Faktisk foretrækker Guido van Rossum, skaberen af Python og Pythons velvillige diktator for livet (BDFL), list comprehension frem for map()-funktionen.

Hvor skal vi gå hen herfra?

Godt nok teori, lad os få noget praksis!

For at få succes med kodning skal du ud og løse rigtige problemer for rigtige mennesker. Det er sådan, du nemt kan blive en sekscifret indtjeningsmand. Og det er sådan, du finpudser de færdigheder, du virkelig har brug for, i praksis. For hvad nytter det at lære teori, som ingen nogensinde får brug for?

Praksisprojekter er sådan, du sliber din sav i kodning!

Vil du blive en kodemester ved at fokusere på praktiske kodeprojekter, der rent faktisk tjener dig penge og løser problemer for folk?

Så bliv Python-freelanceudvikler! Det er den bedste måde at gribe opgaven med at forbedre dine Python-færdigheder an på – selv hvis du er helt nybegynder.

Tilmeld dig mit gratis webinar “How to Build Your High-Income Skill Python” og se, hvordan jeg har udviklet min kodevirksomhed online, og hvordan du også kan gøre det – fra dit eget hjem.

Tilmeld dig det gratis webinar nu!

Mens han arbejdede som forsker inden for distribuerede systemer, fandt Dr. Christian Mayer sin kærlighed til at undervise datalogistuderende.

For at hjælpe studerende med at nå et højere niveau af Python-succes grundlagde han webstedet Finxter.com, der tilbyder undervisning i programmering. Han er forfatter til den populære programmeringsbog Python One-Liners (NoStarch 2020), medforfatter til Coffee Break Python-serien af selvudgivne bøger, computervidenskabsentusiast, freelancer og ejer af en af de 10 største Python-blogs på verdensplan.

Hans passioner er at skrive, læse og programmere. Men hans største passion er at tjene håbefulde kodere gennem Finxter og hjælpe dem med at øge deres færdigheder. Du kan tilmelde dig hans gratis e-mailakademi her.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.