Naučte se vše o funkci sum() v Pythonu: od syntaxe až po její použití s různými iterovatelnými funkcemi – s užitečnými příklady kódu.
Při práci s iterovatelnými prvky Pythonu, jako je seznam čísel, je běžnou operací nalezení součtu všech prvků v seznamu. S těmito operacemi se setkáme při práci s jinými iterovatelnými položkami, jako jsou n-tice a sady.
To lze provést několika různými způsoby, ale doporučeným způsobem Pythonic je použití vestavěné funkce sum().
Zde začneme tím, že se podíváme na další přístupy, jako je smyčkování a definování funkce. Poté se budeme učit syntaxi funkce sum() v Pythonu a příklady kódu, abychom jí lépe porozuměli.
Table of Contents
Sčítání hodnot v iterovatelném Pythonu
📋 Můžete spolu kódovat v Python REPL. Nebo můžete použít etechblog.cz’s Online Python editor.
Zvažte následující seznam čísel:
>>> nums = [2,8,5,3,11,7,9]
Naším cílem je najít součet všech čísel v seznamu. Brzy se dostaneme k funkci Python sum(), ale začneme s některými dalšími přístupy, které můžeme použít. Tyto zahrnují:
- Pomocí jednoduché smyčky for
- Pomocí funkce reduction() z modulu functools
- Definování vlastní funkce
Použití smyček
Abychom našli součet všech prvků v seznamu, můžeme použít cyklus for takto:
- Inicializujte celkovou proměnnou na nulu.
- Procházejte seznam čísel a získejte přístup ke každému číslu.
- Přidejte číslo k součtu.
>>> nums = [2,8,5,3,11,7,9] >>> total = 0 >>> for num in nums: ... total += num ... >>> total 45
Pomocí funkce Snížit
Dalším přístupem k sčítání iterovatelných položek je použití funkce reduction(). Funkce snížení, zabudovaná do modulu functools Pythonu, přijímá funkci a iterovatelnost. A redukuje iterovatelný postup postupným aplikováním funkce na prvky iterovatelného.
Zde používáme funkci lambda k definování sčítání dvou čísel a předání seznamu čísel jako iterovatelné.
>>> nums = [2,8,5,3,11,7,9] >>> from functools import reduce >>> total = reduce(lambda n1, n2: n1 + n2, nums) >>> total 45
Funkce reduction() funguje tak, že postupně sčítá dvě čísla – zleva doprava – dokud se nesníží na jedinou hodnotu součtu:
Použití uživatelské funkce
K tomu můžeme také definovat vlastní funkci. Zde definujeme funkci sum_list, která:
- Jako argument bere seznam čísel a
- Vrátí součet prvků v seznamu.
Tělo funkce používá konstrukci smyčky, na kterou jsme se podívali dříve. Ale definování funkce nám dává znovupoužitelnost.
>>> def sum_list(some_list): ... total = 0 ... for num in some_list: ... total += num ... return total ...
Volání funkce sum_list() s nums jako argumenty vrátí součet 45:
>>> nums = [2,8,5,3,11,7,9] >>> total = sum_list(nums) >>> total 45
Dále se seznámíme s vestavěnou funkcí sum(). Je to nejen stručné, ale také robustní v tom, že funguje dobře s několika iterovatelnými a datovými typy.
Syntaxe funkce Python Sum
Syntaxe pro použití funkce sum() je následující:
sum(iterable, start)
Tady,
- iterable je povinný argument. Může to být libovolná iterovatelná, pro kterou platí operace sčítání, jako je seznam nebo n-tice čísel. Volání funkce sum() s řetězci Pythonu vyvolá výjimku TypeError (více o tom později).
- start je volitelný argument. Často je to číselná hodnota, která se přičítá k vypočtenému součtu. To může být užitečné, když potřebujete k výsledku přidat konstantní hodnotu.
Nyní, když jsme se naučili syntaxi funkce sum() v Pythonu, pojďme ji použít k sečtení iterovatelných položek.
Sčítání iterovatelných s funkcí součtu
#1. Seznam
Pojďme najít součet čísel v seznamu čísel 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
Chcete-li k součtu přidat konstantní hodnotu, můžeme použít funkci sum() s volitelnou počáteční hodnotou. Zde předáme počáteční hodnotu 100 jako poziční argument:
>>> sum_start = sum(nums,100) >>> sum_start 145
Počáteční hodnotu lze také zadat jako argument klíčového slova:
>>> sum_start = sum(nums,start=10) >>> sum_start 55
#2. Tuple
Funkce sum() funguje také s n-ticemi. N-tici nums_tuple vytvoříme přetypováním seznamu nums do n-tice:
>>> nums_tuple = tuple(nums) >>> nums_tuple (2, 8, 5, 3, 11, 7, 9)
>>> sum_2 = sum(nums_tuple) >>> sum_2 45
#3. Soubor
Můžeme také použít funkci sum() se sadou čísel:
>>> nums_set = set(nums) >>> nums_set {2, 3, 5, 7, 8, 9, 11}
Zde přetypujeme seznam nums na množinu Pythonu a vypočítáme součet prvků v nums_set.
>>> sum_3 = sum(nums_set) >>> sum_3 45
#4. Slovník
Zvažte následující student_dikt s numerickými klávesami. Všimněte si, co se stane, když zavoláte 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
Funkce sum() ve výchozím nastavení vrací součet klíčů.
Sčítání klíčů
Víme, že výchozí chování je součet klíčů slovníku.
Můžete to však učinit explicitnějším použitím slovníkové metody keys() pro přístup ke klíčům. A pak předejte v seznamu klíčů funkci sum():
>>> sum_keys = sum(students_dict.keys()) >>> sum_keys 6
Shrnutí hodnot
Pokud byste místo toho chtěli sečíst hodnoty slovníku, přistupte k hodnotám voláním metody values() na objektu slovníku:
>>> sum_vals = sum(students_dict.values()) >>> sum_vals 345
Použití funkce součtu v Pythonu s jinými typy číselných dat
Zatím jsme viděli, jak používat funkci sum() s iterovatelnými celými čísly. Nyní se podívejme na několik příkladů s jinými numerickými datovými typy.
Komplexní čísla
Funkci sum() lze také použít k sečtení komplexních čísel. V tomto příkladu je nums_c seznam komplexních čísel:
>>> nums_c = [3 + 4j, 1 + 2j] >>> sum_c = sum(nums_c) >>> sum_c (4+6j)
Čísla s plovoucí desetinnou čárkou
Zde 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 lepší přesnost ve výsledku přidávání čísel s pohyblivou řádovou čárkou můžete použít funkci fsum() z matematického modulu k součtu iterovatelných položek s hodnotami s pohyblivou řádovou čárkou.
Zploštění pomocí funkce součtu
Nyní se podívejme, jak lze funkci sum() použít ke sloučení a zřetězení iterovatelných položek.
Zploštit seznam
Předpokládejme, že máme vnořený seznam:
>>> lists = [[2,4,6],[3,5,7]]
Když zavoláme funkci sum() předáním tohoto vnořeného seznamu jako argumentu 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 se nyní srovnal do jediného seznamu čísel.
Ekvivalentně, když si myslíme, že seznam má tvar l3 = [l1,l2]funkce sum() zřetězí dva seznamy l1 a l2 vnořené do seznamu l3.
📝Jako rychlé cvičení zkuste použít funkci sum() na jiných vnořených iterablech.
Časté úskalí: Nepoužívejte funkci sum() Pythonu s řetězci
Protože jsme viděli, že funkci sum() lze použít ke sloučení a zřetězení seznamů (a dalších iterovatelných, jako jsou n-tice); je lákavé si myslet, že ho můžeme použít i ke zřetězení řetězců.
Ale pokud se o to pokusíte, narazíte 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]
Funkci sum() tedy nelze použít k sečtení (nebo zřetězení) řetězců.
Jak je však vidět ve výše uvedené 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é. Obecná syntaxe pro použití funkce sum() je: sum(iterovatelný, start), kde iterovatelný je povinný argument a start je volitelný argument.
Poté jsme kódovali několik příkladů, abychom pochopili použití funkce sum() s iterovatelnými položkami, jako jsou seznamy, n-tice, množiny a slovníky. Později jsme se podívali na to, jak lze funkci sum() použít pro zploštění a zřetězení iterovatelných položek – s výjimkou řetězců Pythonu.
Doufám, že vám tento návod pomohl. Dále si možná budete chtít prohlédnout tento tutoriál o mapové funkci Pythonu.