Explore a fundo a funcionalidade da função sum()
em Python, desde sua sintaxe até a aplicação em diversas estruturas iteráveis, acompanhado de exemplos de código práticos.
Ao manipular coleções de dados em Python, como listas de números, é comum necessitar somar todos os elementos. Essa necessidade também surge ao trabalhar com outras coleções, como tuplas e conjuntos.
Embora existam diferentes abordagens, a mais recomendada e “Pythonica” é o uso da função nativa sum()
.
Inicialmente, examinaremos alternativas como loops e a definição de funções. Posteriormente, detalharemos a sintaxe da função sum()
e forneceremos exemplos para facilitar a compreensão.
Somando Valores em um Iterável Python
🧰 Você pode acompanhar os exemplos utilizando um ambiente Python REPL ou o editor online do etechpt.com.
Considere a seguinte lista de números:
>>> nums = [2,8,5,3,11,7,9]
Nosso objetivo é obter a soma de todos os números desta lista. Antes de abordarmos a função sum()
, vamos explorar outras alternativas, como:
- Utilização de um loop
for
simples - Emprego da função
reduce()
do módulofunctools
- Criação de uma função personalizada
Utilizando Loops
Para somar todos os elementos de uma lista, podemos empregar um loop for
da seguinte maneira:
- Inicializamos uma variável
total
com o valor zero. - Iteramos sobre a lista, acessando cada número individualmente.
- Adicionamos cada número à variável
total
.
>>> nums = [2,8,5,3,11,7,9] >>> total = 0 >>> for num in nums: ... total += num ... >>> total 45
Utilizando a Função Reduce
Outra maneira de somar os elementos de um iterável é usando a função reduce()
, presente no módulo functools
. Essa função recebe uma função e um iterável, aplicando a função sucessivamente aos elementos do iterável, reduzindo-o a um único valor.
Neste caso, utilizamos uma função lambda para definir a operação de adição entre dois números e passamos a lista nums
como iterável.
>>> nums = [2,8,5,3,11,7,9] >>> from functools import reduce >>> total = reduce(lambda n1, n2: n1 + n2, nums) >>> total 45
A função reduce()
opera somando os números sequencialmente, da esquerda para a direita, até que se obtenha um único valor correspondente à soma total.
Utilizando uma Função Personalizada
Podemos, também, criar uma função personalizada para realizar a soma. Definimos uma função chamada sum_list
que:
- Aceita uma lista de números como argumento.
- Retorna a soma dos elementos dessa lista.
A função utiliza a construção de loop que vimos anteriormente, oferecendo a vantagem da reutilização.
>>> def sum_list(some_list): ... total = 0 ... for num in some_list: ... total += num ... return total ...
Ao chamar a função sum_list()
com a lista nums
, obtemos o resultado da soma, que é 45:
>>> nums = [2,8,5,3,11,7,9] >>> total = sum_list(nums) >>> total 45
Agora, vamos explorar a função nativa sum()
. Além de concisa, ela é robusta e compatível com diversos iteráveis e tipos de dados.
Sintaxe da Função sum()
em Python
A sintaxe para utilizar a função sum()
é:
sum(iterável, start)
Onde:
iterável
: é um argumento obrigatório, podendo ser qualquer estrutura iterável para a qual a operação de soma seja válida, como listas ou tuplas de números. Tentar usar a função com strings resultará em um erroTypeError
(abordaremos isso mais adiante).start
: é um argumento opcional, geralmente um valor numérico que é somado ao resultado final. Pode ser útil para adicionar uma constante ao resultado.
Agora que compreendemos a sintaxe da função sum()
, vamos aplicá-la para somar diferentes iteráveis.
Somando Iteráveis com a Função sum()
#1. Lista
Vamos somar os números da lista nums
usando a função sum()
:
>>> nums = [2,8,5,3,11,7,9] >>> sum_1 = sum(nums) >>> sum_1 45
Utilizando o Valor Inicial Opcional
Para adicionar um valor constante à soma, utilizamos o argumento opcional start
. Aqui, passamos o valor inicial 100 como argumento posicional:
>>> sum_start = sum(nums,100) >>> sum_start 145
O valor inicial também pode ser especificado como um argumento nomeado:
>>> sum_start = sum(nums,start=10) >>> sum_start 55
#2. Tupla
A função sum()
também funciona com tuplas. Criamos uma tupla nums_tuple
convertendo a lista nums
:
>>> nums_tuple = tuple(nums) >>> nums_tuple (2, 8, 5, 3, 11, 7, 9)
>>> sum_2 = sum(nums_tuple) >>> sum_2 45
#3. Conjunto
Podemos usar a função sum()
com conjuntos de números:
>>> nums_set = set(nums) >>> nums_set {2, 3, 5, 7, 8, 9, 11}
Convertemos a lista nums
em um conjunto Python e calculamos a soma de seus elementos.
>>> sum_3 = sum(nums_set) >>> sum_3 45
#4. Dicionário
Considere o dicionário students_dict
, com chaves numéricas. Veja o que acontece ao chamar a função sum()
com este dicionário como argumento.
>>> students_dict = {1:106,2:112,3:127} >>> sum_4 = sum(students_dict) >>> sum_4 6
Por padrão, a função sum()
retorna a soma das chaves do dicionário.
Somando as Chaves
Podemos explicitar o comportamento padrão utilizando o método keys()
para acessar as chaves e passá-las para a função sum()
:
>>> sum_keys = sum(students_dict.keys()) >>> sum_keys 6
Somando os Valores
Para somar os valores do dicionário, utilizamos o método values()
:
>>> sum_vals = sum(students_dict.values()) >>> sum_vals 345
Utilizando a Função sum()
com Outros Tipos de Dados Numéricos
Vimos exemplos com iteráveis de números inteiros. Agora, vamos ver como a função sum()
se comporta com outros tipos de dados numéricos.
Números Complexos
A função sum()
também pode ser utilizada para somar números complexos. No exemplo abaixo, nums_c
é uma lista de números complexos:
>>> nums_c = [3 + 4j, 1 + 2j] >>> sum_c = sum(nums_c) >>> sum_c (4+6j)
Números de Ponto Flutuante
Utilizamos a função sum()
para somar a lista de números de ponto flutuante nums_f
:
>>> nums_f = [1.8,2.5,3.6,7.2] >>> sum_f = sum(nums_f) >>> sum_f 15.100000000000001
Para maior precisão ao somar números de ponto flutuante, a função fsum()
do módulo math
pode ser utilizada.
“Achatando” Iteráveis com a Função sum()
Agora, vamos analisar como a função sum()
pode ser utilizada para “achatar” e concatenar iteráveis.
“Achatando” uma Lista
Considere a seguinte lista aninhada:
>>> lists = [[2,4,6],[3,5,7]]
Ao chamarmos a função sum()
com a lista aninhada e uma lista vazia como valor inicial:
>>> sum(lists,[]) [2, 4, 6, 3, 5, 7]
Observamos que a lista aninhada foi transformada em uma única lista de números.
De forma equivalente, podemos pensar na lista como sendo l3 = [l1,l2]
, e a função sum()
concatena as listas l1
e l2
na lista l3
.
Experimente usar a função sum()
em outros iteráveis aninhados como exercício.
Armadilha Comum: Não Utilize a Função sum()
com Strings
Como vimos que a função sum()
pode ser utilizada para “achatar” e concatenar listas, é natural pensar que ela poderia ser usada para concatenar strings.
No entanto, ao tentar fazer isso, ocorrerá um 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]
A função sum()
não pode ser utilizada para somar ou concatenar strings.
Conforme indicado na mensagem de erro, o método join()
é recomendado para concatenar uma lista de strings em uma única string.
>>> ''.join(['a','b','c']) 'abc'
Conclusão
Neste tutorial, exploramos o uso da função nativa sum()
para obter a soma de todos os elementos em um iterável. A sintaxe geral é: sum(iterável, start)
, onde iterável
é um argumento obrigatório e start
é um argumento opcional.
Analisamos diversos exemplos para entender a aplicação da função sum()
em listas, tuplas, conjuntos e dicionários. Vimos também como a função pode ser utilizada para “achatar” e concatenar iteráveis, exceto strings.
Esperamos que este tutorial tenha sido útil. Sugerimos explorar também o tutorial sobre a função map()
em Python.