Otkrijte sve o funkciji sum()
u Pythonu: od sintakse do primene sa različitim iterabilnim objektima – uz korisne primere koda.
Kada radite sa Python iterabilnim objektima, kao što je lista brojeva, uobičajena operacija je pronalaženje zbira svih elemenata unutar liste. Slične operacije se pojavljuju i pri radu sa drugim iterabilnim objektima poput tuple-ova i skupova.
Ovo se može postići na više načina, ali preporučeni, „pythonic“ pristup je korišćenje ugrađene funkcije sum()
.
U nastavku ćemo razmotriti neke druge pristupe, poput upotrebe petlje i definisanja sopstvene funkcije. Potom ćemo detaljno proučiti sintaksu Python funkcije sum()
i predstaviti primere koda za bolje razumevanje njenog delovanja.
Sabiranje vrednosti u Python iterabilnim objektima
📋 Možete paralelno pratiti kod u Python REPL-u. Ili možete koristiti online Python editor.
Razmotrimo sledeću listu brojeva:
>>> nums = [2,8,5,3,11,7,9]
Naš cilj je da izračunamo zbir svih brojeva u listi. Uskoro ćemo preći na Python funkciju sum()
, ali prvo ćemo pogledati neke druge metode koje možemo primeniti. To uključuje:
- Upotrebu jednostavne
for
petlje - Korišćenje funkcije
reduce()
iz modulafunctools
- Definisanje prilagođene funkcije
Upotreba petlji
Da bismo izračunali zbir svih elemenata u listi, možemo koristiti for
petlju na sledeći način:
- Inicijalizujemo promenljivu
total
na nulu. - Prolazimo kroz listu brojeva i pristupamo svakom broju pojedinačno.
- Dodajemo trenutni broj promenljivoj
total
.
>>> nums = [2,8,5,3,11,7,9]
>>> total = 0
>>> for num in nums:
... total += num
...
>>> total
45
Upotreba funkcije Reduce
Drugi pristup sabiranju elemenata iterabilnog objekta je korišćenje funkcije reduce()
. Funkcija reduce()
, ugrađena u Pythonov modul functools
, prihvata funkciju i iterabilni objekat. Ona redukuje iterabilni objekat uzastopnom primenom funkcije na njegove elemente.
Ovde koristimo lambda funkciju da definišemo sabiranje dva broja i prosleđujemo listu brojeva kao iterabilni objekat.
>>> nums = [2,8,5,3,11,7,9]
>>> from functools import reduce
>>> total = reduce(lambda n1, n2: n1 + n2, nums)
>>> total
45
Funkcija reduce()
radi tako što sukcesivno sabira dva broja – s leva na desno – dok se ne redukuje na jedinstvenu vrednost zbira:
Upotreba prilagođene funkcije
Takođe možemo definisati sopstvenu funkciju za ovaj zadatak. Ovde definišemo funkciju sum_list
koja:
- Prihvata listu brojeva kao argument i
- Vraća zbir elemenata unutar te liste.
Telo funkcije koristi konstrukciju petlje koju smo već razmatrali. Međutim, definisanjem funkcije dobijamo mogućnost njene ponovne upotrebe.
>>> def sum_list(some_list):
... total = 0
... for num in some_list:
... total += num
... return total
...
Pozivanje funkcije sum_list()
sa listom brojeva kao argumentom vraća zbir 45:
>>> nums = [2,8,5,3,11,7,9]
>>> total = sum_list(nums)
>>> total
45
Sada, hajde da naučimo o ugrađenoj funkciji sum()
. Ona nije samo koncizna, već i robusna jer efikasno radi sa različitim iterabilnim objektima i tipovima podataka.
Sintaksa funkcije Python sum()
Sintaksa korišćenja funkcije sum()
je sledeća:
sum(iterable, start)
Gde je:
iterable
obavezan argument. Može biti bilo koji iterabilni objekat za koji je važeća operacija sabiranja, poput liste ili skupa brojeva. Pozivanje funkcijesum()
sa Python stringovima generišeTypeError
izuzetak (više o tome kasnije).start
opcionalni argument. To je često numerička vrednost koja se dodaje izračunatom zbiru. Ovo može biti korisno kada trebate da dodate konstantnu vrednost rezultatu.
Sada kada smo naučili sintaksu Python funkcije sum()
, iskoristimo je za sabiranje različitih iterabilnih objekata.
Sabiranje iterabilnih objekata funkcijom sum()
#1. Lista
Hajde da izračunamo zbir brojeva u listi koristeći funkciju sum()
:
>>> nums = [2,8,5,3,11,7,9]
>>> sum_1 = sum(nums)
>>> sum_1
45
Upotreba opcionalne početne vrednosti
Da bismo dodali konstantnu vrednost zbiru, možemo koristiti funkciju sum()
sa opcionalnom početnom vrednošću. Ovde prosleđujemo početnu vrednost 100 kao pozicioni argument:
>>> sum_start = sum(nums,100)
>>> sum_start
145
Početna vrednost se takođe može navesti kao argument ključne reči:
>>> sum_start = sum(nums,start=10)
>>> sum_start
55
#2. Tuple
Funkcija sum()
radi i sa tuple-ovima. Kreiramo tuple nums_tuple
tako što pretvaramo listu nums
u tuple:
>>> nums_tuple = tuple(nums)
>>> nums_tuple
(2, 8, 5, 3, 11, 7, 9)
>>> sum_2 = sum(nums_tuple)
>>> sum_2
45
#3. Skup
Takođe možemo koristiti funkciju sum()
sa skupom brojeva:
>>> nums_set = set(nums)
>>> nums_set
{2, 3, 5, 7, 8, 9, 11}
Ovde konvertujemo nums
listu u Python skup i izračunavamo zbir elemenata u nums_set
.
>>> sum_3 = sum(nums_set)
>>> sum_3
45
#4. Rečnik
Razmotrimo sledeći rečnik students_dict
sa numeričkim ključevima. Obratite pažnju na to šta se dešava kada pozovete funkciju sum()
sa ovim rečnikom kao argumentom.
>>> students_dict = {1:106,2:112,3:127}
>>> sum_4 = sum(students_dict)
>>> sum_4
6
Po default-u, funkcija sum()
vraća zbir ključeva.
Sabiranje ključeva
Znamo da je podrazumevano ponašanje sabiranje ključeva rečnika.
Međutim, ovo možete učiniti eksplicitnijim korišćenjem metode keys()
rečnika za pristup ključevima. Zatim prosledite listu ključeva funkciji sum()
:
>>> sum_keys = sum(students_dict.keys())
>>> sum_keys
6
Sabiranje vrednosti
Ako umesto toga želite da saberete vrednosti rečnika, pristupite vrednostima pozivanjem metode values()
na objektu rečnika:
>>> sum_vals = sum(students_dict.values())
>>> sum_vals
345
Korišćenje Pythonove funkcije sum()
sa drugim numeričkim tipovima podataka
Do sada smo videli kako koristiti funkciju sum()
sa iterabilnim objektima celih brojeva. Pogledajmo sada nekoliko primera sa drugim numeričkim tipovima podataka.
Kompleksni brojevi
Funkcija sum()
se takođe može koristiti za sabiranje kompleksnih brojeva. U ovom primeru, nums_c
je lista kompleksnih brojeva:
>>> nums_c = [3 + 4j, 1 + 2j]
>>> sum_c = sum(nums_c)
>>> sum_c
(4+6j)
Brojevi sa pokretnim zarezom
Ovde koristimo funkciju sum()
da saberemo listu brojeva sa pokretnim zarezom nums_f
:
>>> nums_f = [1.8,2.5,3.6,7.2]
>>> sum_f = sum(nums_f)
>>> sum_f
15.100000000000001
📑 Za poboljšanu preciznost u rezultatu sabiranja brojeva sa pokretnim zarezom, možete koristiti funkciju fsum()
iz matematičkog modula da biste sumirali iterabilne objekte sa vrednostima u pokretnom zarezu.
Ravnanje iterabilnih objekata funkcijom sum()
Sada da vidimo kako se funkcija sum()
može koristiti za ravnanje i spajanje iterabilnih objekata.
Ravnjanje liste
Pretpostavimo da imamo ugnježdenu listu:
>>> lists = [[2,4,6],[3,5,7]]
Kada pozovemo funkciju sum()
tako što prosledimo ovu ugnježdenu listu kao argument zajedno sa praznom listom kao početnom vrednošću:
>>> sum(lists,[])
[2, 4, 6, 3, 5, 7]
Vidimo da je ugnježdena lista sada spljoštena u jednu listu brojeva.
Ekivalentno, kada pomislimo da je lista oblika l3 = [l1,l2]
funkcija sum()
spaja dve liste l1
i l2
ugnježđene unutar liste l3
.
📝 Kao brzu vežbu, pokušajte da koristite funkciju sum()
na drugim ugnježdenim iterabilnim objektima.
Uobičajena zamka: Nemojte koristiti Pythonovu funkciju sum()
sa stringovima
Pošto smo videli da se funkcija sum()
može koristiti za ravnanje i spajanje lista (i drugih iterabilnih objekata kao što su tuple-ovi), primamljivo je pomisliti da je možemo koristiti i za spajanje stringova.
Ali ako pokušate to da uradite, naići ćete na 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]
Dakle, funkcija sum()
se ne može koristiti za sabiranje (ili spajanje) stringova.
Međutim, kao što se vidi u gornjoj poruci o grešci, možete koristiti metodu join()
da povežete listu stringova u jedan string.
>>> ''.join(['a','b','c'])
'abc'
Zaključak
U ovom vodiču smo naučili kako da koristimo ugrađenu funkciju sum()
da pronađemo zbir svih elemenata u iterabilnom objektu. Opšta sintaksa za korišćenje funkcije sum()
je: sum(iterable, start)
, gde je iterable
obavezan argument, a start
je opcioni argument.
Zatim smo predstavili nekoliko primera koda da bismo razumeli upotrebu funkcije sum()
sa iterabilnim objektima kao što su liste, tuple-ovi, skupovi i rečnici. Kasnije smo pogledali kako se funkcija sum()
može koristiti za ravnanje i spajanje iterabilnih objekata – sa izuzetkom Python stringova.
Nadam se da vam je ovaj vodič bio koristan. Sledeće, možda ćete želeti da pogledate ovaj vodič o Pythonovoj funkciji map()
.