Înțelegerea funcției Sum a lui Python [With Examples]

Descoperă totul despre funcția sum() în Python

Acest articol explorează în profunzime funcția sum() din Python, oferind o analiză detaliată a sintaxei sale, a modului de utilizare cu diverse tipuri de date iterabile și exemple practice pentru a facilita înțelegerea. Dacă te afli în situația de a lucra frecvent cu colecții de date, cum ar fi liste de numere, vei aprecia această funcție pentru eficiența și simplitatea ei.

În mod obișnuit, atunci când avem de-a face cu structuri de date iterabile, precum liste, tupluri sau seturi, una dintre operațiile fundamentale este calcularea sumei tuturor elementelor. Python oferă multiple modalități de a realiza acest lucru, însă metoda recomandată și cea mai „pythonică” este utilizarea funcției predefinite sum().

În cele ce urmează, vom analiza diverse abordări pentru a calcula suma elementelor dintr-un iterabil, incluzând utilizarea buclelor și definirea de funcții personalizate. Ulterior, ne vom concentra asupra sintaxei funcției sum() și vom oferi exemple detaliate pentru a demonstra versatilitatea acesteia.

Calcularea sumei valorilor într-un iterabil Python

Pentru a exersa exemplele prezentate, poți utiliza un mediu REPL Python sau editorul online de la tipstrick.ro.

Să considerăm următoarea listă de numere drept punct de plecare:

>>> nums = [2,8,5,3,11,7,9]

Obiectivul nostru este de a determina suma tuturor numerelor din această listă. Înainte de a ne concentra asupra funcției sum(), vom explora câteva metode alternative, cum ar fi:

  • Utilizarea unei bucle for.
  • Folosirea funcției reduce() din modulul functools.
  • Definirea unei funcții personalizate pentru a calcula suma.

Folosirea buclelor

Pentru a obține suma elementelor unei liste, putem utiliza o buclă for, parcurgând fiecare element și adăugându-l la un total inițializat la zero.

  • Se inițializează o variabilă total cu valoarea zero.
  • Se iterează prin lista de numere.
  • Se adaugă fiecare număr la variabila total.
>>> nums = [2,8,5,3,11,7,9]
>>> total = 0
>>> for num in nums:
...     total += num
...
>>> total
45

Utilizarea funcției reduce()

O altă metodă de a însuma elementele unui iterabil este utilizarea funcției reduce(), disponibilă în modulul functools. Această funcție aplică o funcție specificată iterativ asupra elementelor iterabilului, reducându-l la o singură valoare.

În exemplul de mai jos, folosim o funcție lambda pentru a defini adunarea a două numere, aplicând-o asupra listei de numere.

>>> nums = [2,8,5,3,11,7,9]
>>> from functools import reduce
>>> total = reduce(lambda n1, n2: n1 + n2, nums)
>>> total
45

Funcția reduce() adaugă succesiv două numere din lista, de la stânga la dreapta, până când se obține suma totală.

Definirea unei funcții personalizate

Putem crea și o funcție personalizată pentru a calcula suma elementelor dintr-o listă. În exemplul de mai jos, definim o funcție sum_list care primește ca argument o listă de numere și returnează suma elementelor.

Corpul funcției utilizează o buclă for similară cu cea prezentată anterior, oferind însă un nivel sporit de reutilizabilitate.

>>> def sum_list(some_list):
...     total = 0
...     for num in some_list:
...        total += num
...     return total
...

Apelând funcția sum_list() cu lista nums ca argument, obținem suma 45:

>>> nums = [2,8,5,3,11,7,9]
>>> total = sum_list(nums)
>>> total
45

În continuare, vom explora funcția predefinită sum(). Aceasta este nu doar concisă, ci și robustă, funcționând eficient cu o varietate de iterabile și tipuri de date.

Sintaxa funcției Python sum()

Sintaxa funcției sum() este următoarea:

sum(iterable, start)

Aici:

  • iterable este un argument obligatoriu, care reprezintă un obiect iterabil, cum ar fi o listă sau un tuplu de numere. Apelarea funcției sum() cu șiruri de caractere va genera o excepție TypeError.
  • start este un argument opțional, reprezentând o valoare numerică care se adaugă la suma calculată. Acest argument poate fi util când se dorește adăugarea unei valori constante la rezultat.

Acum că am înțeles sintaxa, vom trece la exemple practice pentru a demonstra utilizarea funcției sum().

Calcularea sumei iterabilelor cu funcția sum()

#1. Listă

Să calculăm suma numerelor dintr-o listă folosind funcția sum():

>>> nums = [2,8,5,3,11,7,9]
>>> sum_1 = sum(nums)
>>> sum_1
45
Utilizarea valorii de start opționale

Pentru a adăuga o valoare constantă sumei, folosim argumentul opțional start. În exemplul de mai jos, adăugăm valoarea 100:

>>> sum_start = sum(nums,100)
>>> sum_start
145

Valoarea de start poate fi specificată și ca argument cuvânt cheie:

>>> sum_start = sum(nums,start=10)
>>> sum_start
55

#2. Tuplu

Funcția sum() funcționează și cu tupluri. Vom crea un tuplu nums_tuple prin conversia listei de numere:

>>> nums_tuple = tuple(nums)
>>> nums_tuple
(2, 8, 5, 3, 11, 7, 9)
>>> sum_2 = sum(nums_tuple)
>>> sum_2
45

#3. Set

De asemenea, putem utiliza funcția sum() cu seturi de numere:

>>> nums_set = set(nums)
>>> nums_set
{2, 3, 5, 7, 8, 9, 11}

În acest caz, convertim lista nums într-un set și calculăm suma elementelor acestuia:

>>> sum_3 = sum(nums_set)
>>> sum_3
45

#4. Dicționar

Să considerăm următorul dicționar, student_dict, cu chei numerice. Să observăm ce se întâmplă când apelăm funcția sum() cu acest dicționar:

>>> students_dict = {1:106,2:112,3:127}
>>> sum_4 = sum(students_dict)
>>> sum_4
6

În mod implicit, funcția sum() returnează suma cheilor dicționarului.

Însumarea cheilor

Pentru a clarifica faptul că dorim să însumăm cheile dicționarului, putem utiliza metoda keys() pentru a accesa cheile, apoi putem trece lista cheilor către funcția sum():

>>> sum_keys = sum(students_dict.keys())
>>> sum_keys
6
Însumarea valorilor

Pentru a calcula suma valorilor dicționarului, accesăm valorile folosind metoda values():

>>> sum_vals = sum(students_dict.values())
>>> sum_vals
345

Utilizarea funcției sum() cu alte tipuri numerice

Am analizat până acum utilizarea funcției sum() cu iterabile de numere întregi. Acum vom explora exemple cu alte tipuri de date numerice.

Numere complexe

Funcția sum() poate fi utilizată și pentru a însuma numere complexe. În exemplul următor, nums_c este o listă de numere complexe:

>>> nums_c = [3 + 4j, 1 + 2j]
>>> sum_c = sum(nums_c)
>>> sum_c
(4+6j)

Numere în virgulă mobilă

Aici, utilizăm funcția sum() pentru a însuma o listă de numere în virgulă mobilă, nums_f:

>>> nums_f = [1.8,2.5,3.6,7.2]
>>> sum_f = sum(nums_f)
>>> sum_f
15.100000000000001

Pentru o precizie sporită în rezultatele adunării numerelor în virgulă mobilă, se poate folosi funcția fsum() din modulul math.

Aplatizarea listelor cu funcția sum()

Vom analiza acum cum poate fi utilizată funcția sum() pentru a aplatiza și a concatena iterabile.

Aplatizarea unei liste

Să presupunem că avem o listă imbricată:

>>> lists = [[2,4,6],[3,5,7]]

Apelând funcția sum() cu lista imbricată și o listă goală ca valoare de start, obținem o listă aplatizată:

>>> sum(lists,[])
[2, 4, 6, 3, 5, 7]

În esență, funcția sum() concatenează sublistele într-o singură listă.

Încearcă să aplici funcția sum() pe alte iterabile imbricate pentru a observa rezultatele.

Capcană frecventă: evitarea utilizării funcției sum() cu șiruri de caractere

Deoarece am observat că funcția sum() poate fi folosită pentru a aplatiza și concatena liste, este ușor să considerăm că funcționează și cu șiruri de caractere.

Însă, încercarea de a face acest lucru va genera o eroare 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]

Funcția sum() nu este adecvată pentru a însuma sau concatena șiruri de caractere.

În schimb, se poate folosi metoda join() pentru a concatena o listă de șiruri într-un singur șir:

>>> ''.join(['a','b','c'])
'abc'

Concluzie

În acest articol, am explorat în detaliu utilizarea funcției predefinite sum() pentru a calcula suma elementelor dintr-un iterabil. Sintaxa generală este: sum(iterable, start), unde iterable este un argument obligatoriu, iar start este opțional.

Am analizat exemple de utilizare a funcției cu liste, tupluri, seturi și dicționare. Am observat, de asemenea, că funcția sum() poate fi folosită pentru a aplatiza și concatena iterabile, cu excepția șirurilor de caractere.

Sperăm că acest articol a fost util. Te invităm să explorezi și tutorialul despre funcția map() din Python.