Objevte všechny aspekty funkce sum()
v Pythonu. Prozkoumáme její syntaxi, různorodé použití s iterovatelnými strukturami a poskytneme praktické ukázky kódu.
Při manipulaci s iterovatelnými datovými typy v Pythonu, například seznamy čísel, je běžnou operací zjišťování součtu všech prvků. Tento úkol se objevuje i při práci s jinými iterovatelnými kolekcemi, jako jsou n-tice a množiny.
Existuje několik přístupů k řešení tohoto problému, ale nejvíce doporučeným a „pythonovským“ řešením je použití vestavěné funkce sum()
.
Začneme s pohledem na alternativní metody, jako je použití smyček a definování vlastní funkce. Následně se zaměříme na detailní prozkoumání syntaxe funkce sum()
v Pythonu, včetně příkladů kódu pro lepší pochopení.
Sčítání hodnot v iterovatelných objektech v Pythonu
Můžete experimentovat s kódem přímo v Python REPL, případně využít online editor Pythonu.
Uvažujme následující seznam čísel:
>>> nums = [2,8,5,3,11,7,9]
Naším cílem je vypočítat součet všech čísel v seznamu. Než se dostaneme k samotné funkci sum()
, projdeme si několik dalších metod, které můžeme použít. Mezi tyto metody patří:
- Použití jednoduché smyčky
for
- Využití funkce
reduce()
z modulufunctools
- Definování vlastní uživatelské funkce
Použití smyček
Pro výpočet součtu všech prvků v seznamu můžeme použít smyčku for
následovně:
- Inicializujeme proměnnou pro součet na nulu.
- Projdeme seznam čísel a získáme přístup ke každému číslu.
- Přidáme aktuální číslo k celkovému součtu.
>>> nums = [2,8,5,3,11,7,9] >>> total = 0 >>> for num in nums: ... total += num ... >>> total 45
Využití funkce reduce
Další metodou pro sčítání prvků v iterovatelných objektech je použití funkce reduce()
. Tato funkce, zabudovaná do modulu functools
v Pythonu, přijímá funkci a iterovatelný objekt. Funkce reduce()
postupně aplikuje danou funkci na prvky iterovatelného objektu a redukuje jej na jednu hodnotu.
V následujícím příkladu použijeme lambda funkci k definování sčítání dvou čísel. Tento proces je aplikován na seznam čísel:
>>> nums = [2,8,5,3,11,7,9] >>> from functools import reduce >>> total = reduce(lambda n1, n2: n1 + n2, nums) >>> total 45
Funkce reduce()
iterativně sčítá dvě čísla zleva doprava, dokud se celková hodnota nesníží na součet.
Definování vlastní funkce
Můžeme také definovat vlastní funkci pro tento účel. Vytvoříme funkci sum_list
, která:
- Přijme jako argument seznam čísel.
- Vrátí součet všech prvků seznamu.
Tělo funkce využívá konstrukci smyčky, kterou jsme si představili výše. Definování funkce nám však umožňuje opakované použití kódu.
>>> def sum_list(some_list): ... total = 0 ... for num in some_list: ... total += num ... return total ...
Volání funkce sum_list()
s argumentem nums
vrátí součet 45:
>>> nums = [2,8,5,3,11,7,9] >>> total = sum_list(nums) >>> total 45
Nyní se podíváme na vestavěnou funkci sum()
. Ta je nejen stručná, ale také robustní, protože dobře funguje s různými iterovatelnými objekty a datovými typy.
Syntaxe funkce sum()
v Pythonu
Syntaxe použití funkce sum()
je následující:
sum(iterable, start)
Kde:
iterable
je povinný argument. Může to být libovolný iterovatelný objekt, který podporuje operaci sčítání, jako je seznam nebo n-tice čísel. Použití funkcesum()
s řetězci vyvolá výjimkuTypeError
(více o tom později).start
je volitelný argument. Často je to číselná hodnota, která se přičte k vypočtenému součtu. Tato možnost je užitečná, když potřebujeme k výsledku přičíst konstantní hodnotu.
Nyní, když známe syntaxi funkce sum()
v Pythonu, podívejme se na její použití při sčítání prvků iterovatelných objektů.
Sčítání iterovatelných objektů pomocí funkce sum()
#1. Seznam
Nalezněme součet čísel v seznamu pomocí funkce sum()
:
>>> nums = [2,8,5,3,11,7,9] >>> sum_1 = sum(nums) >>> sum_1 45
Použití volitelné počáteční hodnoty
Pokud chceme k součtu přičíst konstantní hodnotu, můžeme použít funkci sum()
s volitelnou počáteční hodnotou. V následujícím příkladu přidáme hodnotu 100 jako poziční argument:
>>> sum_start = sum(nums,100) >>> sum_start 145
Počáteční hodnotu lze také zadat jako argument s klíčovým slovem:
>>> sum_start = sum(nums,start=10) >>> sum_start 55
#2. N-tice
Funkce sum()
funguje také s n-ticemi. N-tici nums_tuple
vytvoříme přetypováním seznamu nums
na n-tici:
>>> nums_tuple = tuple(nums) >>> nums_tuple (2, 8, 5, 3, 11, 7, 9)
>>> sum_2 = sum(nums_tuple) >>> sum_2 45
#3. Množina
Můžeme také použít funkci sum()
s množinou čísel:
>>> nums_set = set(nums) >>> nums_set {2, 3, 5, 7, 8, 9, 11}
V tomto příkladu přetypujeme seznam nums
na množinu a vypočítáme součet prvků v nums_set
.
>>> sum_3 = sum(nums_set) >>> sum_3 45
#4. Slovník
Uvažujme následující slovník students_dict
s číselnými klíči. Podívejte se, co se stane, když zavoláme funkci sum()
s tímto slovníkem jako argumentem.
>>> students_dict = {1:106,2:112,3:127} >>> sum_4 = sum(students_dict) >>> sum_4 6
Ve výchozím nastavení funkce sum()
vrací součet klíčů slovníku.
Sčítání klíčů
Jak víme, výchozí chování funkce je sečtení klíčů slovníku.
Můžeme však toto chování explicitně vyjádřit použitím metody keys()
k přístupu ke klíčům, které pak předáme funkci sum()
:
>>> sum_keys = sum(students_dict.keys()) >>> sum_keys 6
Sčítání hodnot
Pokud místo toho chceme sečíst hodnoty slovníku, můžeme k nim přistoupit voláním metody values()
na objektu slovníku:
>>> sum_vals = sum(students_dict.values()) >>> sum_vals 345
Použití funkce sum()
v Pythonu s jinými typy číselných dat
Dosud jsme viděli, jak používat funkci sum()
s iterovatelnými objekty obsahujícími celá čísla. Nyní se podíváme na několik příkladů s jinými číselnými datovými typy.
Komplexní čísla
Funkci sum()
lze také použít ke sčítání komplexních čísel. V tomto příkladu nums_c
je seznam komplexních čísel:
>>> nums_c = [3 + 4j, 1 + 2j] >>> sum_c = sum(nums_c) >>> sum_c (4+6j)
Čísla s plovoucí desetinnou čárkou
V tomto příkladu použijeme funkci sum()
k sečtení seznamu čísel s plovoucí desetinnou čárkou nums_f
:
>>> nums_f = [1.8,2.5,3.6,7.2] >>> sum_f = sum(nums_f) >>> sum_f 15.100000000000001
Pro vyšší přesnost při sčítání čísel s plovoucí desetinnou čárkou můžete použít funkci fsum()
z modulu math
.
Zploštění iterovatelných objektů pomocí funkce sum()
Nyní se podívejme, jak lze funkci sum()
použít ke sloučení a zřetězení iterovatelných objektů.
Zploštění seznamu
Předpokládejme, že máme vnořený seznam:
>>> lists = [[2,4,6],[3,5,7]]
Když zavoláme funkci sum()
a předáme jí tento vnořený seznam jako argument spolu s prázdným seznamem jako počáteční hodnotou:
>>> sum(lists,[]) [2, 4, 6, 3, 5, 7]
Vidíme, že vnořený seznam byl transformován do jednoho plochého seznamu čísel.
Pokud uvažujeme, že seznam má tvar l3 = [l1,l2]
, funkce sum()
zřetězí dva seznamy l1
a l2
, které jsou vnořené v l3
.
Pro procvičení si zkuste použít funkci sum()
na jiné vnořené iterovatelné objekty.
Časté úskalí: Nepoužívejte funkci sum()
s řetězci
Jak už jsme viděli, funkci sum()
lze použít ke sloučení a zřetězení seznamů (a dalších iterovatelných objektů, jako jsou n-tice). Proto by se mohlo zdát lákavé ji použít i ke zřetězení řetězců.
Pokud se o to ale pokusíte, narazíte na výjimku 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]
Funkci sum()
tedy nelze použít k sečtení (nebo zřetězení) řetězců.
Jak je ale uvedeno ve výše zmíněné chybové zprávě, můžete použít metodu join()
ke zřetězení seznamu řetězců do jednoho řetězce.
>>> ''.join(['a','b','c']) 'abc'
Závěr
V tomto tutoriálu jsme se naučili, jak používat vestavěnou funkci sum()
k nalezení součtu všech prvků v iterovatelném objektu. Obecná syntaxe pro použití funkce sum()
je: sum(iterable, start)
, kde iterable
je povinný argument a start
je argument volitelný.
Ukázali jsme si několik příkladů, abychom pochopili použití funkce sum()
s iterovatelnými objekty, jako jsou seznamy, n-tice, množiny a slovníky. Později jsme se podívali na to, jak lze funkci sum()
použít ke zploštění a zřetězení iterovatelných objektů, kromě řetězců v Pythonu.
Doufám, že vám tento tutoriál byl užitečný. Dále byste si mohli chtít prohlédnout tento tutoriál o funkci map()
v Pythonu.