Domine a função sum() em Python: Guia completo com exemplos

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ódulo functools
  • 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 erro TypeError (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.