Aprenda tudo sobre a função sum() em Python: da sintaxe para usá-la com vários iteráveis—com exemplos de código úteis.
Ao trabalhar com iteráveis do Python, como uma lista de números, uma operação comum é encontrar a soma de todos os elementos da lista. Também encontraremos essas operações ao trabalhar com outros iteráveis, como tuplas e conjuntos.
Isso pode ser feito de algumas maneiras diferentes, mas a maneira Pythonic recomendada é usar a função sum() incorporada.
Aqui, começaremos examinando as outras abordagens, como looping e definição de uma função. Em seguida, aprenderemos a sintaxe da função sum() do Python e exemplos de código para entendê-la melhor.
últimas postagens
Somando valores em um Python iterável
📋 Você pode codificar junto em um Python REPL. Ou você pode usar o editor Online Python do etechpt.com.
Considere a seguinte lista de números:
>>> nums = [2,8,5,3,11,7,9]
Nosso objetivo é encontrar a soma de todos os números da lista. Abordaremos a função sum() do Python em breve, mas começaremos com algumas das outras abordagens que podemos adotar. Esses incluem:
- Usando um loop for simples
- Usando a função reduce() do módulo functools
- Definindo uma função personalizada
Usando loops
Para encontrar a soma de todos os elementos em uma lista, podemos usar um loop for da seguinte forma:
- Inicialize a variável total como zero.
- Percorra a lista de números e acesse cada número.
- Adicione o número ao total.
>>> nums = [2,8,5,3,11,7,9] >>> total = 0 >>> for num in nums: ... total += num ... >>> total 45
Usando a Função Reduzir
Outra abordagem para somar iteráveis é usar a função reduce(). A função de redução, incorporada ao módulo functools do Python, recebe uma função e um iterável. E reduz o iterável aplicando sucessivamente a função nos elementos do iterável.
Aqui, usamos uma função lambda para definir a adição de dois números e passar a lista nums como o 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() funciona adicionando dois números sucessivamente — da esquerda para a direita — até reduzir a um único valor de soma:
Usando uma função personalizada
Também podemos definir uma função personalizada para fazer isso. Aqui, definimos uma função sum_list que:
- Toma uma lista de números como argumento e
- Retorna a soma dos elementos em uma lista.
O corpo da função usa a construção de loop que vimos anteriormente. Mas definir uma função nos dá capacidade de reutilização.
>>> def sum_list(some_list): ... total = 0 ... for num in some_list: ... total += num ... return total ...
Chamar a função sum_list() com nums como argumento retorna a soma de 45:
>>> nums = [2,8,5,3,11,7,9] >>> total = sum_list(nums) >>> total 45
A seguir, vamos aprender sobre a função interna sum(). Não é apenas conciso, mas também robusto, pois funciona bem com vários iteráveis e tipos de dados.
Sintaxe da função de soma do Python
A sintaxe para usar a função sum() é a seguinte:
sum(iterable, start)
Aqui,
- iterável é um argumento obrigatório. Pode ser qualquer iterável para o qual a operação de soma é válida, como uma lista ou tuplas de números. Chamar a função sum() com strings Python gera uma exceção TypeError (falaremos mais sobre isso posteriormente).
- start é um argumento opcional. Muitas vezes, é um valor numérico que é adicionado à soma calculada. Isso pode ser útil quando você precisa adicionar um valor constante ao resultado.
Agora que aprendemos a sintaxe da função sum() do Python, vamos usá-la para somar iteráveis.
Somar iteráveis com a função Sum
#1. Lista
Vamos encontrar a soma dos números na lista nums usando a função sum():
>>> nums = [2,8,5,3,11,7,9] >>> sum_1 = sum(nums) >>> sum_1 45
Usando o valor inicial opcional
Para adicionar um valor constante à soma, podemos usar a função sum() com o valor inicial opcional. Aqui, passamos um valor inicial de 100 como um argumento posicional:
>>> sum_start = sum(nums,100) >>> sum_start 145
O valor inicial também pode ser especificado como um argumento de palavra-chave:
>>> 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 de nums em uma tupla:
>>> nums_tuple = tuple(nums) >>> nums_tuple (2, 8, 5, 3, 11, 7, 9)
>>> sum_2 = sum(nums_tuple) >>> sum_2 45
#3. Definir
Também podemos usar a função sum() com um conjunto de números:
>>> nums_set = set(nums) >>> nums_set {2, 3, 5, 7, 8, 9, 11}
Aqui, lançamos a lista nums para um conjunto Python e calculamos a soma dos elementos em nums_set.
>>> sum_3 = sum(nums_set) >>> sum_3 45
#4. Dicionário
Considere o seguinte Student_dict com chaves numéricas. Observe o que acontece quando você chama 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
A função sum(), por padrão, retorna a soma das chaves.
Somando as Chaves
Sabemos que o comportamento padrão é somar as chaves do dicionário.
No entanto, você pode tornar isso mais explícito usando o método de dicionário keys() para acessar as chaves. E então passe a lista de chaves para a função sum():
>>> sum_keys = sum(students_dict.keys()) >>> sum_keys 6
Somando os Valores
Se você quiser somar os valores do dicionário, acesse os valores chamando o método values() no objeto do dicionário:
>>> sum_vals = sum(students_dict.values()) >>> sum_vals 345
Usando a função Sum do Python com outros tipos de dados numéricos
Até agora, vimos como usar a função sum() com iteráveis de inteiros. Agora vamos ver alguns exemplos com outros tipos de dados numéricos.
Números complexos
A função sum() também pode ser usada para somar números complexos. Neste exemplo, 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
Aqui, usamos 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 no resultado da adição de números de ponto flutuante, você pode usar a função fsum() do módulo math para somar iteráveis com valores de ponto flutuante.
Achatando com a função de soma
Agora vamos ver como a função sum() pode ser usada para achatar e concatenar iteráveis.
Achatar uma Lista
Suponha que temos uma lista aninhada:
>>> lists = [[2,4,6],[3,5,7]]
Quando chamamos a função sum() passando esta lista aninhada como argumento junto com uma lista vazia como valor inicial:
>>> sum(lists,[]) [2, 4, 6, 3, 5, 7]
Vemos que a lista aninhada foi achatada em uma única lista de números.
Equivalentemente, quando pensamos na lista como sendo l3 = [l1,l2]a função sum() concatena as duas listas l1 e l2 aninhadas na lista l3.
📝Como um exercício rápido, tente usar a função sum() em outros iteráveis aninhados.
Armadilha comum: não use a função sum() do Python com strings
Porque vimos que a função sum() pode ser usada para achatar e concatenar listas (e outros iteráveis como tuplas); é tentador pensar que podemos usá-lo para concatenar strings também.
Mas se você tentar fazer isso, encontrará 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]
Portanto, a função sum() não pode ser usada para somar (ou concatenar) strings.
No entanto, conforme visto na mensagem de erro acima, você pode usar o método join() para concatenar uma lista de strings em uma única string.
>>> ''.join(['a','b','c']) 'abc'
Conclusão
Neste tutorial, aprendemos como usar a função interna sum() para encontrar a soma de todos os elementos em um iterável. A sintaxe geral para usar a função sum() é: sum(iterable, start), onde iterable é um argumento obrigatório e start é um argumento opcional.
Em seguida, codificamos vários exemplos para entender o uso da função sum() com iteráveis como listas, tuplas, conjuntos e dicionários. Posteriormente, vimos como a função sum() pode ser usada para simplificar e concatenar iteráveis — com exceção de strings Python.
Espero que você tenha achado este tutorial útil. Em seguida, você pode conferir este tutorial sobre a função map do Python.