Lær alt om sum()-funksjonen i Python: fra syntaksen for å bruke den med forskjellige iterables – med nyttige kodeeksempler.
Når du arbeider med Python iterables, for eksempel en liste med tall, er en vanlig operasjon å finne summen av alle elementene i listen. Vi vil støte på slike operasjoner når vi jobber med andre iterables, for eksempel tupler og sett, også.
Dette kan gjøres på noen forskjellige måter, men den anbefalte Pythonic-måten er å bruke den innebygde sum()-funksjonen.
Her starter vi med å se på de andre tilnærmingene, for eksempel looping og definere en funksjon. Vi vil deretter fortsette å lære syntaksen til Pythons sum()-funksjon og kodeeksempler for å forstå den bedre.
Innholdsfortegnelse
Summering av verdier i en Python Iterable
📋 Du kan kode med i en Python REPL. Eller du kan bruke tipsbilk.net’s Online Python-redigeringsprogram.
Tenk på følgende liste over tall:
>>> nums = [2,8,5,3,11,7,9]
Målet vårt er å finne summen av alle tallene i listen. Vi kommer snart til Python sum()-funksjonen, men vi starter med noen av de andre tilnærmingene vi kan ta. Disse inkluderer:
- Bruke en enkel for loop
- Ved å bruke reduce()-funksjonen fra functools-modulen
- Definere en egendefinert funksjon
Bruke løkker
For å finne summen av alle elementene i en liste, kan vi bruke en for-løkke slik:
- Initialiser total variabel til null.
- Gå gjennom talllisten og få tilgang til hvert tall.
- Legg til tallet til totalen.
>>> nums = [2,8,5,3,11,7,9] >>> total = 0 >>> for num in nums: ... total += num ... >>> total 45
Bruke Reduser-funksjonen
En annen tilnærming til å summere iterables er å bruke reduce()-funksjonen. Reduseringsfunksjonen, innebygd i Pythons functools-modul, tar inn en funksjon og en iterable. Og reduserer den iterable ved suksessivt å bruke funksjonen på elementene i den iterable.
Her bruker vi en lambda-funksjon for å definere addisjonen av to tall og pass in nums list som iterable.
>>> nums = [2,8,5,3,11,7,9] >>> from functools import reduce >>> total = reduce(lambda n1, n2: n1 + n2, nums) >>> total 45
Reduser()-funksjonen fungerer ved å legge til to tall suksessivt – fra venstre til høyre – til den reduseres til en enkelt sumverdi:
Bruke en egendefinert funksjon
Vi kan også definere en egendefinert funksjon for å gjøre dette. Her definerer vi en funksjon sum_list som:
- Tar inn en liste med tall som argument og
- Returnerer summen av elementer i en liste.
Brødteksten til funksjonen bruker looping-konstruksjonen vi så på tidligere. Men å definere en funksjon gir oss gjenbrukbarhet.
>>> def sum_list(some_list): ... total = 0 ... for num in some_list: ... total += num ... return total ...
Å kalle sum_list()-funksjonen med tall som argumenter returnerer summen av 45:
>>> nums = [2,8,5,3,11,7,9] >>> total = sum_list(nums) >>> total 45
La oss deretter lære om den innebygde sum()-funksjonen. Den er ikke bare kortfattet, men også robust ved at den fungerer godt med flere iterables og datatyper.
Syntaks for Python Sum-funksjonen
Syntaksen for å bruke sum()-funksjonen er som følger:
sum(iterable, start)
Her,
- iterable er et nødvendig argument. Det kan være en hvilken som helst iterabel som summeringsoperasjonen er gyldig for, for eksempel en liste eller tupler med tall. Å kalle sum()-funksjonen med Python-strenger gir et TypeError-unntak (mer om dette senere).
- start er et valgfritt argument. Det er ofte en numerisk verdi som legges til den beregnede summen. Dette kan være nyttig når du trenger å legge til en konstant verdi til resultatet.
Nå som vi har lært syntaksen til Python sum()-funksjonen, la oss bruke den til å summere iterables.
Summering av iterables med sumfunksjon
#1. Liste
La oss finne summen av tall i nums-listen ved å bruke sum()-funksjonen:
>>> nums = [2,8,5,3,11,7,9] >>> sum_1 = sum(nums) >>> sum_1 45
Bruke den valgfrie startverdien
For å legge til en konstant verdi til summen, kan vi bruke funksjonen sum() med den valgfrie startverdien. Her sender vi inn en startverdi på 100 som et posisjonsargument:
>>> sum_start = sum(nums,100) >>> sum_start 145
Startverdien kan også angis som et nøkkelordargument:
>>> sum_start = sum(nums,start=10) >>> sum_start 55
#2. Tuppel
Sum()-funksjonen fungerer også med tupler. Vi lager en tuppel nums_tuple ved å kaste talllisten til en tuppel:
>>> nums_tuple = tuple(nums) >>> nums_tuple (2, 8, 5, 3, 11, 7, 9)
>>> sum_2 = sum(nums_tuple) >>> sum_2 45
#3. Sett
Vi kan også bruke sum()-funksjonen med et sett med tall:
>>> nums_set = set(nums) >>> nums_set {2, 3, 5, 7, 8, 9, 11}
Her kaster vi nums-listen til et Python-sett og beregner summen av elementene i nums_set.
>>> sum_3 = sum(nums_set) >>> sum_3 45
#4. Ordbok
Tenk på følgende student_dict med numeriske taster. Legg merke til hva som skjer når du kaller sum()-funksjonen med denne ordboken som argument.
>>> students_dict = {1:106,2:112,3:127} >>> sum_4 = sum(students_dict) >>> sum_4 6
Sum()-funksjonen returnerer som standard summen av nøklene.
Oppsummering av nøklene
Vi vet at standardoppførselen er å summere nøklene til ordboken.
Du kan imidlertid gjøre dette mer eksplisitt ved å bruke ordbokmetodetastene() for å få tilgang til nøklene. Og send deretter listen over nøkler til sum()-funksjonen:
>>> sum_keys = sum(students_dict.keys()) >>> sum_keys 6
Oppsummering av verdiene
Hvis du vil summere verdiene til ordboken i stedet, får du tilgang til verdiene ved å kalle verdier()-metoden på ordbokobjektet:
>>> sum_vals = sum(students_dict.values()) >>> sum_vals 345
Bruke Pythons sumfunksjon med andre numeriske datatyper
Så langt har vi sett hvordan man bruker sum()-funksjonen med iterables av heltall. La oss nå se på et par eksempler med andre numeriske datatyper.
Komplekse tall
Sum()-funksjonen kan også brukes til å summere komplekse tall. I dette eksemplet er nums_c en liste over komplekse tall:
>>> nums_c = [3 + 4j, 1 + 2j] >>> sum_c = sum(nums_c) >>> sum_c (4+6j)
Flytende kommatall
Her bruker vi sum()-funksjonen for å summere listen over flyttall tall nums_f:
>>> nums_f = [1.8,2.5,3.6,7.2] >>> sum_f = sum(nums_f) >>> sum_f 15.100000000000001
📑 For forbedret presisjon i resultatet av å legge til flyttall, kan du bruke fsum()-funksjonen fra matematikkmodulen for å summere iterable med flyttallverdier.
Utflating med Sum-funksjonen
La oss nå se hvordan sum()-funksjonen kan brukes til å flate ut og sammenkoble iterable.
Flat en liste
Anta at vi har en nestet liste:
>>> lists = [[2,4,6],[3,5,7]]
Når vi kaller sum()-funksjonen ved å sende inn denne nestede listen som argumentet sammen med en tom liste som startverdi:
>>> sum(lists,[]) [2, 4, 6, 3, 5, 7]
Vi ser at den nestede listen nå har flatet ut til en enkelt liste med tall.
Tilsvarende, når vi tenker på at listen har formen l3 = [l1,l2]setter sum()-funksjonen sammen de to listene l1 og l2 nestet i listen l3.
📝Som en rask øvelse, prøv å bruke sum()-funksjonen på andre nestede iterables.
Vanlig fallgruve: Ikke bruk Pythons sum()-funksjon med strenger
Fordi vi har sett at sum()-funksjonen kan brukes til å flate ut og sammenkoble lister (og andre iterable som tuples); det er fristende å tro at vi også kan bruke det til å sette sammen strenger.
Men hvis du prøver å gjøre det, får du en TypeError:
>>> sum(['a','b','c'],'') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: sum() can't sum strings [use ''.join(seq) instead]
Så sum()-funksjonen kan ikke brukes til å summere (eller sette sammen) strenger.
Som vist i feilmeldingen ovenfor, kan du imidlertid bruke join()-metoden til å sette sammen en liste med strenger til en enkelt streng.
>>> ''.join(['a','b','c']) 'abc'
Konklusjon
I denne opplæringen lærte vi hvordan du bruker den innebygde sum()-funksjonen for å finne summen av alle elementene i en iterabel. Den generelle syntaksen for å bruke sum()-funksjonen er: sum(iterable, start), der iterable er et nødvendig argument og start er et valgfritt argument.
Vi kodet deretter flere eksempler for å forstå bruken av sum()-funksjonen med iterables som lister, tuples, sett og ordbøker. Senere har vi sett på hvordan sum()-funksjonen kan brukes til å flate ut og sammenkoble iterables – med unntak av Python-strenger.
Jeg håper du fant denne opplæringen nyttig. Deretter vil du kanskje sjekke ut denne opplæringen om Pythons kartfunksjon.